简体   繁体   中英

Declaring atomic pointers vs. pointers to atomics

I understand that the following declaration creates an array of values, each of which is atomic:

_Atomic int x[10];

However, I'm unclear on whether this:

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

Creates an array of 10 atomic integers, or is an atomic pointer to an array of nonatomic integers. Does that syntax declare an array of atomics or an atomic pointer to an array, and whichever it is, how does one declare the other?

(Note: I'm aware of atomic_int , and in the presented example it would remove the ambiguity. This is a simpler version of what I'm actually trying to do, which uses an atomic enum. Thanks!)

It's pointer to atomic integer, see http://en.cppreference.com/w/c/language/atomic .

To declare atomic pointer to an integer, you would need to put the keyword right before the variable:

 int * _Atomic x;

Note that the example with calloc may work on common platforms but generally there is no warranty that the types of non-atomic and atomic variables are the same. So it's necessary to initialize the variables with atomic_init :

 x = calloc(10, sizeof(_Atomic int));
 for (...) atomic_init(&x[i], 0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM