如今,每个现代操作系统都提供了一些原子操作:
- Windows 有
Interlocked*
API - FreeBSD 有
<machine/atomic.h>
- 索拉里斯有
<atomic.h>
- Mac OS X 有
<libkern/OSAtomic.h>
Linux有类似的东西吗?
- 我需要它在大多数 Linux 支持的平台上工作,包括:x86、x86_64 和 arm。
- 我需要它至少在 GCC 和 Intel 编译器上工作。
- 我不需要使用像 glib 或 qt 这样的 3rd par 库。
- 我需要它在 C++ 中工作(不需要 C)
问题:
- 并非所有平台 (ARM) 都支持GCC atomic builtins
__sync_*
,英特尔编译器也不支持。 - AFAIK
<asm/atomic.h>
不应该在用户空间中使用,我根本没有成功使用它。另外,我不确定它是否适用于英特尔编译器。
有什么建议么?
我知道有很多相关的问题,但其中一些指向__sync*
这对我 (ARM) 来说是不可行的,还有一些指向asm/atomic.h
.
也许有一个内联汇编库可以为 GCC 执行此操作(ICC 支持 gcc 汇编)?
编辑:
仅针对添加操作有一个非常部分的解决方案(允许实现原子计数器,但不允许实现需要 CAS 的无锁结构):
如果您使用libstc++
(英特尔编译器使用libstdc++
),那么您可以使用在或__gnu_cxx::__exchange_and_add
中定义的那个。取决于编译器版本。<ext/atomicity.h>
<bits/atomicity.h>
但是我仍然希望看到支持 CAS 的东西。