用于存储和递增的gcc原子扩展

用于存储和递增的gcc原子扩展,gcc,atomic,atomicity,Gcc,Atomic,Atomicity,是否存在任何gcc扩展以原子方式执行类似于 在C语言中,a=b++。对于这样一个简单的操作,使用互斥似乎是一种过分的杀伤力。您不需要使用任何扩展;只需使用: #包括 原子存储(&a,原子获取(&b,1)); 在第一批条目中出现了一个快速的谷歌搜索。我确实看了那个网页,但它对我的查询没有帮助。您可以使用这些扩展以原子方式执行(b++)操作,但该页中没有给出执行a=b++的方法。看起来,单独的原子存储和原子获取添加是原子的,但它们一起也是原子的吗?@mc_87,这取决于您所说的“原子”是什么意思;但

是否存在任何gcc扩展以原子方式执行类似于


在C语言中,a=b++。对于这样一个简单的操作,使用互斥似乎是一种过分的杀伤力。

您不需要使用任何扩展;只需使用

#包括
原子存储(&a,原子获取(&b,1));

在第一批条目中出现了一个快速的谷歌搜索。我确实看了那个网页,但它对我的查询没有帮助。您可以使用这些扩展以原子方式执行(b++)操作,但该页中没有给出执行a=b++的方法。看起来,单独的原子存储和原子获取添加是原子的,但它们一起也是原子的吗?@mc_87,这取决于您所说的“原子”是什么意思;但是,由于默认顺序是顺序一致性,并且存在从
b
a
的依赖链,因此可以保证没有其他线程可以看到
a
的新值以及
b
的先前值。这就是你想要的吗?对不起,我应该告诉你更多的细节。这里a是一个私有变量,b是一个共享变量。
#include <stdatomic.h>

atomic_store(&a, atomic_fetch_add(&b, 1));