我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b
我目前正在汇编中编写它然后将其链接进去。但是,我想知道是否有办法让编译器自动为我执行此操作?例如使用'atomically'环绕代码块并让它弄清楚如何将代码实现为底层处理器体系结构中的原子指令(或者如果底层arch不支持它,则在编译时生成错误)?
P.S。我知道gcc有一些内置插件(至少对于CAS)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins
答案 0 :(得分:12)
已经回复here。
C ++ 0x标准将使用std :: atomic<>提供一些atomic datatypes,主要是整数和空类型。模板。那篇文章提到了你今天可以下载和使用的Boehm's atomic_ops project。
如果没有,你不能在编译器中实现汇编内联吗?我知道MSVC具有内联汇编程序例程的__asm关键字。谷歌说yes,gcc can do it too。
答案 1 :(得分:6)
C ++未来的“C ++ 0x”标准将支持原子操作& c - 参见例如http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html进行了合理的讨论。在所述即将出台的标准得到批准和广泛实施之前,当然,没有办法在编译器之间“移植”这些功能;如果您对gcc之外的特定编译器感兴趣,也许您可以专门针对它们打开另一个问题。