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

goj*_*oji 5 c++ multithreading atomic libstdc++ c++11

我做了一些谷歌,似乎无法为此发现GCC选项或libstdc ++宏.是否可以在所有std::atomic模板特化上强制使用内部锁定.在某些平台上,一些专业化无论如何都是锁定的,因此它看起来似乎是一个可行的选择.

在过去,我发现在使用Valgrind(HelgrindDRD)std::atomic等工具调试数据竞争时,由于大量的误报,使用起来非常痛苦.如果使用atomics足够普遍,抑制文件似乎不是一个非常可扩展的解决方案.

chi*_*ill 2

没有办法,据我所知。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并为自己提供所需的外部函数。