12

我正在使用原子(双)比较和交换指令实现无锁机制,例如 cmpxchg16b

我目前正在汇编中编写它,然后将其链接。但是,我想知道是否有办法让编译器自动为我执行此操作?例如,用“原子”包围代码块并让它弄清楚如何在底层处理器架构中将代码实现为原子指令(或者如果底层架构不支持它,则在编译时生成错误)?

PS我知道gcc有一些内置的(至少对于CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

4

2 回答 2

12

已经有点回答here了

C++0x 标准将提供一些原子数据类型,主要是使用 std::atomic<> 模板的整数和 void 类型。那篇文章提到了 Boehm 的 atomic_ops 项目,您可以立即下载并使用它。

如果没有,你不能在编译器中实现你的汇编器内联吗?我知道 MSVC 有__asm关键字用于内联汇编程序例程。谷歌说的,gcc也可以

于 2009-05-31T00:49:29.137 回答
6

C++ 未来的“C++0x”标准将支持原子操作 &c——参见http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html彻底的讨论。当然,在即将到来的标准被批准并广泛实施之前,没有办法在编译器之间“可移植”地获得这样的功能。如果您对 gcc 之外的特定编译器感兴趣,也许您可​​以专门针对它们提出另一个问题。

于 2009-05-31T00:07:42.853 回答