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

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

附:我知道 gcc 有一些内置函数(至少对于 CAS 来说)

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

有帮助吗?

解决方案

已经有点回答了 这里.

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

如果没有,您不能在编译器中内联实现汇编器吗?我知道 MSVC 有 __asm 内联汇编程序例程的关键字。谷歌说 是的, 海湾合作委员会 也可以做到.

其他提示

有C ++的未来 “的C ++ 0x” 标准将支持原子操作&C - 参见例如 http://www.open-std.org /JTC1/sc22/wg21/docs/papers/2007/n2427.html 一个合理thorought讨论。直到所述即将到来的标准得到批准和广泛实施,当然,有没有办法跨越编译器来获得这样的功能“便携”;如果你有兴趣在超越GCC编译器的具体,也许你可以专门开辟关于他们的另一个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top