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

时间:2017-02-07 05:14:05

标签: c atomic c11

我知道以下声明会创建一个值数组,每个值都是原子的:

_Atomic int x[10];

但是,我不清楚是否:

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

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

(注意:我知道atomic_int,并且在提供的示例中它将消除歧义。这是我实际尝试做的更简单的版本,它使用原子枚举。谢谢!)

1 个答案:

答案 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);