我用谷歌搜索了一下,似乎找不到GCC选项或libstdc++ 库宏为此。是否可以强制在所有的内部使用锁定std::atomic
模板专业化。在某些平台上,某些专业化无论如何都会锁定,因此这似乎是一个可行的选择。
过去我发现使用std::atomic
使用诸如以下工具调试数据争用时会非常痛苦Valgrind (Helgrind or DRD)由于大量的误报。如果原子的使用足够普遍,那么抑制文件似乎不是一个非常可扩展的解决方案。
没有办法,据我所知。 GCC 通过无锁内置函数实现 C++11 原子(__atomic_fetch_add
, __atomic_test_and_set
, ETC)。根据机器定义中可用的内容,GCC 可能会发出一些有效的 insn 序列,或者作为最后的手段,使用比较和交换循环。如果没有可用的东西,GCC 只会发出对具有相同名称和参数的外部函数的调用。
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fatomic-Builtins.html#_005f_005fatomic-Builtins http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/_005f_005fatomic-Builtins.html#_005f_005fatomic-Builtins
附言。实际上,你可以编译-m32 -march=i386
并为自己提供所需的外部功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)