我已经在Mac OS X上搜索了原子增量和递减运算符并找到了“OSAtomic.h”,但似乎你只能在内核空间中使用它。
Jeremy Friesner指出我在跨平台atomic counter,他们在OS X上使用汇编或互斥(据我所知,ifdefs的交错)。
OS X上是否有类似InterlockedDecrement
或atomic_dec()
的内容?
答案 0 :(得分:7)
是什么让你觉得OSAtomic只是内核空间?以下编译并正常工作。
#include <libkern/OSAtomic.h>
#include <stdio.h>
int main(int argc, char** argv) {
int32_t foo = 1;
OSAtomicDecrement32(&foo);
printf("%d\n", foo);
return 0;
}
答案 1 :(得分:1)
当前,建议使用C ++ 11的std::atomic
。
答案 2 :(得分:0)
您还可以查看Intel's Threaded Building Blocks atomic
模板类。
答案 3 :(得分:0)
你也可以通过CoreServices使用IncrementAtomic()和DecrementAtomic():
#include <CoreServices/CoreServices.h>
int main(int argc, char** argv)
{
int val = 0;
IncrementAtomic(&val);
DecrementAtomic(&val);
return 0;
}
注意:这些函数的返回值是之前的整数的值,因此如果你想要与Win32 InterlockedIncrement()和InterlockedDecrement()函数类似的行为,你将需要创建包含+1到返回值的包装。