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