在使用 libstdc++ 调试期间强制使用 std::atomic 内部的锁

Force use of locks inside std::atomic during debugging with libstdc++

本文关键字:atomic 内部 std 调试 libstdc++      更新时间:2023-10-16

我已经做了一些谷歌,似乎无法为此打开GCC选项或libstdc ++宏。是否可以强制在所有std::atomic模板专用化上使用内部锁定。在某些平台上,一些专业化无论如何都会锁定,因此这似乎是一个可行的选择。

过去,我发现在使用ValgrindHelgrindDRD)等工具调试数据竞赛时,由于大量的误报,使用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进行编译并为自己提供所需的外部函数。