声明原子指针与指向原子的指针
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);
我理解以下声明创建了一个值数组,每个值都是原子的:
_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);