如果条件在C/C++中成立,如何以原子方式设置值?

Sev*_*ves 3 c++ atomic compare-and-swap c++11

a = b如果条件c成立,我需要自动分配,如果条件不成立,则不分配.有没有办法在C/C++中做到这一点?

澄清:我的意思是原子地"测试和分配",而不是"原子分配".

Sme*_*eey 9

没有一个操作可以完成您一般所需的操作.如果您的条件测试if 已经设置为某个特定值,涵盖的常见情况.在这种情况下,您需要的操作是比较和交换,例如:ca

std::atomic<int> value;
...
int expected = 9;
bool result = std::atomic_compare_exchange_strong(&value, &expected, 10);
Run Code Online (Sandbox Code Playgroud)

value仅当条件value == 9成立时,此处设置为10 ,整个操作是原子操作.

如果你的条件不采用这种形式,那么你必须使用互斥(或其他一些多操作机制)来实现原子性.