2009-05-30 44 views
11

我正在实现一个使用原子(双)比较和交换指令的无锁机制。 cmpxchg16b无锁结构的C++原子操作

我目前正在编写这个程序集,然后将其链接。但是,我想知道是否有一种方法让编译器自动为我做这件事?例如环绕代码块'原子地',并让它去搞清楚如何在底层处理器体系结构中将代码实现为原子指令(或者如果底层代码不支持它,则会在编译时产生错误)?

P.S.我知道,GCC有一些内置插件(至少对于CAS)

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

回答

11

已经很好回答了here

C++ 0x标准将提供一些atomic datatypes,主要是使用std :: atomic <>模板的整型和空类型。该文章提到了Boehm's atomic_ops project,您可以立即下载和使用它。

如果不是,你不能在编译器中实现你的汇编程序吗?我知道MSVC的内联汇编程序例程有__asm关键字。 Google说yes,gcc can do it too

5

未来“的C++ 0x”标准C++支持原子操作&Ç - 例如见http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html进行了合理的讨论。在即将到来的标准获得批准并得到广泛实施之前,当然,在编译器中“无法移植”这种功能是没有办法的。如果你对gcc以外的特定编译器感兴趣,也许你可以专门打开另一个关于它们的问题。

+0

不知道如果我错过了一些东西,但链接的文章似乎并不相关。 – bugmenot77 2009-05-31 00:22:59

+0

你是对的,粘贴错误的网址 - 现在编辑修复,谢谢! – 2009-05-31 01:52:49