C17标准7.17.2.2节对<stdatomic.h>中定义的void atomic_init(volatile A *obj, C value)作了如下说明
虽然这个函数初始化一个原子对象,但它并不能避免数据竞争;并发访问被初始化的变量,即使是通过原子操作,也构成了一个数据竞争。
既然拥有原子对象和原子操作的全部目的是避免数据竞争,那么为什么存在atomic_init函数呢?例如,为什么不做下面的工作呢?
_Atomic int x = 7; 而不是:
_Atomic int x;
atomic_init(&x, 7);另外,当它实际上是一个任务时,为什么它被称为atomic_init呢?
发布于 2022-03-23 23:43:47
Atomic值可能有用于实现所需语义的隐藏字段,这些字段需要以某种方式进行初始化。这可以使用C变量初始化程序或使用atomic_init来实现。
对于静态变量或自动变量,提供两个选项:
_Atomic int x = 7;_Atomic int x;
atomic_init( &x, 7 );但这只为动态分配的变量留下了一个选项。
_Atomic int *p = malloc( sizeof( _Atomic int ) );
atomic_init( p, 7 );https://stackoverflow.com/questions/71595059
复制相似问题