Why PTHREAD_COND_INITIALIZER may be used to initialize a condition variable only when it is declared?

Because it is a structure initializer, you cannot use it to init the structure in a statement apart from its declaration.

It is defined on my system like so:

#define PTHREAD_COND_INITIALIZER {_PTHREAD_COND_SIG_init, {0}}

Expanded and used, we see:

pthread_cond_t p = PTHREAD_COND_INITIALIZER; // << ok!
p = PTHREAD_COND_INITIALIZER; // << compiler error =\

That is,

p = PTHREAD_COND_INITIALIZER;

expands to:

p = {_PTHREAD_COND_SIG_init, {0}};

Leave a Comment