Почему PTHREAD_COND_INITIALIZER может использоваться для инициализации условной переменной только тогда, когда она объявлена? - PullRequest
6 голосов
/ 27 февраля 2012

Поскольку PTHREAD_COND_INITIALIZER на самом деле является инициализатором структуры, его можно использовать для инициализации переменной условия, только когда она объявлена.

С : многопоточныйПрограммирование с потоками POSIX

Вопрос : Невозможно понять приведенную выше цитату.
Это просто макрос, , почему я не могу использовать его для инициализациипеременная условия во время выполнения?
Какое отношение имеет инициализатор структуры к чему-либо?

Ответы [ 2 ]

9 голосов
/ 27 февраля 2012

Поскольку это инициализатор структуры, вы не можете использовать его для инициации структуры в выражении, кроме ее объявления.

Это определено в моей системе следующим образом:

#define PTHREAD_COND_INITIALIZER {_PTHREAD_COND_SIG_init, {0}}

Расширив и использовав, мы видим:

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

То есть

p = PTHREAD_COND_INITIALIZER;

расширяется до:

p = {_PTHREAD_COND_SIG_init, {0}};
0 голосов
/ 24 февраля 2015

Для g++, используйте параметр -std=c++0x, и ваша проблема должна быть решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...