标准库中是否支持CAS等无锁操作?

问题描述 投票:0回答:2

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

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

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

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

c++ atomic c++-standard-library lock-free stdatomic
2个回答
12
投票

已经回答了这里

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

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


6
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.