声明原子指针与指向原子的指针

Declaring atomic pointers vs. pointers to atomics

我理解以下声明创建了一个值数组,每个值都是原子的:

_Atomic int x[10];

但是,我不清楚是否:

_Atomic int *x;
x = calloc(10, sizeof(int));

创建一个包含 10 个原子整数的数组,或者是一个指向非原子整数数组的原子指针。该语法是声明一个原子数组还是一个指向数组的原子指针,无论是哪个,如何声明另一个?

(注意:我知道 atomic_int,在给出的示例中,它会消除歧义。这是我实际尝试做的事情的更简单版本,它使用原子枚举. 谢谢!)

它是指向原子整数的指针,参见http://en.cppreference.com/w/c/language/atomic

要声明指向整数的原子指针,您需要将关键字放在变量之前:

 int * _Atomic x;

请注意,带有 calloc 的示例可能适用于常见平台,但通常不保证 non-atomic 和原子变量的类型相同。所以有必要用 atomic_init:

初始化变量
 x = calloc(10, sizeof(_Atomic int));
 for (...) atomic_init(&x[i], 0);