C++ 如何使用原子获取添加显式替换原子增量32?

C++ 如何使用原子获取添加显式替换原子增量32?,c++,C++,我的应用程序中有这两行代码 volatile __block int32_t counter = 0; 后来在一个循环中 OSAtomicIncrement32(&counter); 但是现在,osatomiciincrement32被弃用了,Xcode向我显示了这个错误消息 “OsatomiciIncrement32”已弃用:在iOS 10.0中首次弃用- 从中使用原子获取添加显式(内存顺序) 反而 看到这个错误消息,有一个参数是要原子的\u fetch\u add\u expl

我的应用程序中有这两行代码

volatile __block int32_t counter = 0;
后来在一个循环中

 OSAtomicIncrement32(&counter);
但是现在,
osatomiciincrement32
被弃用了,Xcode向我显示了这个错误消息

“OsatomiciIncrement32”已弃用:在iOS 10.0中首次弃用- 从中使用原子获取添加显式(内存顺序) 反而

看到这个错误消息,有一个参数是要
原子的\u fetch\u add\u explicit
,对吗

所以我试着

atomic_fetch_add_explicit(&counter)
我看到了这个信息

函数调用的参数太少,应为3,但有1

我喜欢Xcode转储的糟糕消息

我如何使用它?

阅读。。。它使用指向目标变量的指针、要添加的数字(在您的例子中可能是1)和编译器建议的内存顺序,即
内存\u顺序\u松弛
,可能与
OSAtomicIncrement32
的现有行为相匹配

atomic_fetch_add_explicit(&counter, 1, memory_order_relaxed);
如果您不知道内存顺序是什么,那么最好使用具有“最安全”顺序的普通
原子\u fetch\u add

atomic_fetch_add(&counter, 1);

上述的,如果你实际上是在C++中工作,并且这个变量只被你的代码使用,你可以使用一个<代码> STD::AddiICIONIT/<代码>(或<代码> STD::原子< /代码>如果你想要保证32位范围)和“平原<代码> ++< /Cord>运算符。< /P>

std::atomic_int counter{0};

//...

++counter;

只需使用
std::atomic
@SombreroChicken与
int
相比,
double
甚至
ptrdiff
遗漏了什么?