当前位置:  开发笔记 > 编程语言 > 正文

无锁结构的C++原子操作

如何解决《无锁结构的C++原子操作》经验,为你挑选了2个好方法。

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

我目前正在汇编中编写它,然后将其链接进去.但是,我想知道是否有办法让编译器自动为我执行此操作?例如,带有'原子级'的环绕代码块,并让它弄清楚如何将代码实现为底层处理器体系结构中的原子指令(或者如果底层arch不支持它,则在编译时生成错误)?

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

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



1> gbjbaanb..:

已经有点回答了这里.

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

如果没有,你不能在编译器中内联汇编器吗?我知道MSVC具有内联汇编程序例程的__asm关键字.谷歌说是的,gcc 也可以做到.


MSVC具有互锁操作,GCC具有内置的原子操作功能,因此不需要内联汇编程序.通过使用编译器包装器,您将可以保持对编译器支持的所有平台的可移植性

2> Alex Martell..:

C++未来的"C++ 0x"标准将支持原子操作&c - 请参阅http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html合理经过讨论.在所述即将出台的标准得到批准和广泛实施之前,当然,没有办法在编译器之间"移植"这些功能; 如果您对gcc之外的特定编译器感兴趣,也许您可​​以专门针对它们打开另一个问题.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有