Проверка значения pthread_cond_t - PullRequest
       25

Проверка значения pthread_cond_t

0 голосов
/ 07 октября 2019

Я пытаюсь проверить значение переменной типа pthread_cond_t в состоянии цикла while.

Переменная определяется в структуре узла со следующей формой:

pthread_cond_t cv;

Когда я пытаюсь проверить значение этого параметра с помощью != или == NULL, я получаю ошибки, которыене может быть сделаноВот как это выглядит, когда я пытаюсь это проверить:

while(!node->cv) {

, где node - указатель на структуру, содержащую cv.

Я получаю сообщение об ошибке «неверный тип аргумента с одинарным восклицательным знаком, поскольку я предполагаю, что это не логическое значение. Есть ли способ проверить, имеет ли эта переменная условия значение?

1 Ответ

4 голосов
/ 07 октября 2019

Переменные условия не имеют значений. Это абстрактные объекты, о которых вы ждете и сигнализируете, и abstract связаны с выражениями логического результата (предикатами), включающими другие переменные в вашей программе, которые защищены ассоциированным мьютексом. Поэтому вместо:

while (!node->cv)

вы делаете:

while (some_predicate(node))
    pthread_cond_wait(&node->cv, &node->mtx);

Это должно быть сделано с уже заблокированным мьютексом.

...