在使用 libstdc++ 调试期间强制使用 std::atomic 内部的锁
Force use of locks inside std::atomic during debugging with libstdc++
我已经做了一些谷歌,似乎无法为此打开GCC选项或libstdc ++宏。是否可以强制在所有std::atomic
模板专用化上使用内部锁定。在某些平台上,一些专业化无论如何都会锁定,因此这似乎是一个可行的选择。
过去,我发现在使用Valgrind(Helgrind或DRD)等工具调试数据竞赛时,由于大量的误报,使用std::atomic
是非常痛苦的。如果原子的使用足够普遍,抑制文件似乎不是一个非常可扩展的解决方案。
没办法,AFAIK。GCC通过无锁内置函数(__atomic_fetch_add
、__atomic_test_and_set
等)实现C++11原子。根据计算机定义中可用的内容,GCC 可能会发出一些有效的 insn 序列,或者作为最后的手段,使用比较和交换循环。如果没有有用的东西可用,GCC 只会发出对具有相同名称和参数的外部函数的调用。
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fatomic-Builtins.html#_005f_005fatomic-Builtins
实际上,您可以使用-m32 -march=i386
进行编译并为自己提供所需的外部函数。
相关文章:
- 将函数类成员映射到类本身内部
- 如何从 std::atomic 中提取指针 T<T>?
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- Boost Spirit,获取迭代器内部语义动作
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 内联函数中具有内部链接的全局变量
- 在函数内部的声明中初始化数组,并在外部使用它
- 如何在不知道向量大小的情况下输入向量内部的向量?
- std::memory_order for std::atomic:<T>:wait
- 卷曲bracers内部结构的声明
- 从函数角度看ID到文件路径的内部与外部映射
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 如何在pugixml中获取节点的内部XML
- 使用C链接在函数内部创建C++模板
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 指针没有更新它在void函数内部指向的值
- 方法内部但循环仍得到预期的不合格id错误C++
- C++:具有内部链接的正向声明常量
- SDL_PollEvent() 无法捕获类函数内部SDL_QUIT?
- 在使用 libstdc++ 调试期间强制使用 std::atomic 内部的锁