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

标签 c++ atomic lock-free

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

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

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

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

最佳答案

已经回答了here .

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

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

关于无锁结构的 C++ 原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/930897/

相关文章:

c++ - 运算符优先级

c - 在这种情况下正确使用 'volatile' (C)?

multithreading - 在没有同步或原子性的情况下访问不同线程中的 64 位变量

c++ - 如何将 blockng waitUntil() 方法写入使用 std::atomics 的池

C++ 无锁模板化对象池

c++ - 这种初始化和赋值叫什么?

c++ - 如何在 QwtPlot 上给 QwtPlotCurve 添加标签?

c++ - C++ 中多个值的多线程原子存储/加载

c++ - 为什么两个核上的两个实例的运行时间比单个实例的运行时间要大?

c++ - 命名空间 'atomic' 中没有名为 'std' 的类型