我知道以下声明创建了一个值数组,每个值都是原子的:
_Atomic int x[10];
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚这是否:
_Atomic int *x;
x = calloc(10, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
创建一个由 10 个原子整数组成的数组,或者是一个指向非原子整数数组的原子指针。该语法是否声明了一个原子数组或一个指向数组的原子指针,无论是哪个,一个如何声明另一个?
(注意:我知道atomic_int,并且在给出的示例中它会消除歧义。这是我实际尝试做的更简单的版本,它使用原子枚举。谢谢!)
它是指向原子整数的指针,请参阅http://en.cppreference.com/w/c/language/atomic。
要声明指向整数的原子指针,您需要将关键字放在变量之前:
int * _Atomic x;
Run Code Online (Sandbox Code Playgroud)
请注意,带有 calloc 的示例可能适用于通用平台,但通常不保证非原子变量和原子变量的类型相同。所以有必要用以下方法初始化变量atomic_init:
x = calloc(10, sizeof(_Atomic int));
for (...) atomic_init(&x[i], 0);
Run Code Online (Sandbox Code Playgroud)