我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b
我目前正在用汇编语言编写此代码,然后将其链接到其中。但是,我想知道是否有一种方法可以让编译器自动为我执行此操作?例如用“原子”包围代码块,并让它弄清楚如何在底层处理器架构中将代码实现为原子指令(或者如果底层架构不支持,则在编译时生成错误)?
附注我知道 gcc 有一些内置函数(至少对于 CAS 来说)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins
C++ 的未来“C++0x”标准将支持原子操作 &c——参见例如http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html进行相当彻底的讨论。当然,在即将推出的标准获得批准并广泛实施之前,无法跨编译器“移植”此类功能;如果您对 gcc 之外的特定编译器感兴趣,也许您可以专门针对它们提出另一个问题。