我在 Mac OS X 上搜索了原子递增和递减运算符并找到了“OSAtomic.h”,但您似乎只能在内核空间中使用它。
Jeremy Friesner指给我一个跨平台的原子计数器,他们在其中使用 OS X 上的汇编或互斥锁(据我了解 ifdefs 的交错)。
没有类似InterlockedDecrement
或atomic_dec()
在 OS X 上的东西吗?
我在 Mac OS X 上搜索了原子递增和递减运算符并找到了“OSAtomic.h”,但您似乎只能在内核空间中使用它。
Jeremy Friesner指给我一个跨平台的原子计数器,他们在其中使用 OS X 上的汇编或互斥锁(据我了解 ifdefs 的交错)。
没有类似InterlockedDecrement
或atomic_dec()
在 OS X 上的东西吗?
是什么让您认为 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;
}
目前,建议使用 C++11 的std::atomic
.
您还可以查看Intel 的 Threaded Building Blocks的atomic
模板类。
您还可以通过 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 的包装器.