今天,每个现代OS都提供一些原子操作:
Interlocked*
<machine/atomic.h>
<atomic.h>
<libkern/OSAtomic.h>
像Linux一样的东西吗?
问题:
__sync_*
<asm/atomic.h>
有什么建议么?
我知道有很多相关问题,但是其中一些问题__sync*对我(ARM)而言是不可行的,而某些问题则针对asm/atomic.h。
__sync*
asm/atomic.h
也许有一个针对GCC的内联汇编库(ICC支持gcc汇编)?
编辑:
对于添加操作,有一个非常局部的解决方案(允许实现原子计数器,但不能锁定需要CAS的自由结构):
如果使用libstc++(英特尔编译器使用libstdc++),则可以使用或__gnu_cxx::__exchange_and_add中定义的值。取决于编译器版本。<ext/atomicity.h>``<bits/atomicity.h>
libstc++
libstdc++
__gnu_cxx::__exchange_and_add
<ext/atomicity.h>``<bits/atomicity.h>
但是,我仍然希望看到一些支持CAS的东西。
项目正在使用此:
http://packages.debian.org/source/sid/libatomic- ops
如果您想要简单的操作(例如CAS),您是否不能仅使用内核之外的特定于arch的实现,并使用autotools / cmake在用户空间中进行arch检查?就许可而言,尽管内核是GPL,但我认为这些操作的内联程序集由Intel / AMD提供是有争议的,而不是内核具有许可证。它们恰好是内核源代码中易于访问的形式。