我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b
我目前正在汇编中编写它,然后将其链接。但是,我想知道是否有一种方法可以让编译器自动为我执行此操作?例如用“原子”包围代码块,让它弄清楚如何在底层处理器架构中将代码实现为原子指令(或者如果底层架构不支持,则在编译时生成错误)?
附:我知道 gcc 有一些内置函数(至少对于 CAS)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins
最佳答案
已经回答了here .
C++0x 标准将提供一些 atomic datatypes ,主要是使用 std::atomic<> 模板的整数和 void 类型。那篇文章提到Boehm's atomic_ops project您可以立即下载和使用。
如果没有,你不能在编译器中实现你的汇编器内联吗?我知道 MSVC 有 __asm内联汇编程序的关键字。谷歌说 yes , gcc can do it too .
关于无锁结构的 C++ 原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930897/