繁体   English   中英

mac OS X上的原子增量

[英]Atomic increment on mac OS X

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

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

OS X上是不是有类似InterlockedDecrementatomic_dec()东西?

是什么让你觉得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

您还可以查看英特尔的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的包装器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM