6

我在 Mac OS X 上搜索了原子递增和递减运算符并找到了“OSAtomic.h”,但您似乎只能在内核空间中使用它。

Jeremy Friesner指给我一个跨平台的原子计数器,他们在其中使用 OS X 上的汇编或互斥锁(据我了解 ifdefs 的交错)。

没有类似InterlockedDecrementatomic_dec()在 OS X 上的东西吗?

4

4 回答 4

9

是什么让您认为 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;
}
于 2010-01-23T20:52:35.773 回答
2

目前,建议使用 C++11 的std::atomic.

于 2018-07-14T15:03:41.453 回答
0

您还可以查看Intel 的 Threaded Building Blocksatomic模板类。

于 2010-01-23T20:54:01.513 回答
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 的包装器.

于 2010-09-30T19:13:43.887 回答