Несколько pthread_cond_wait разбудить и удерживать блокировку мьютекса - PullRequest
1 голос
/ 24 июля 2011

Согласно справочной странице, pthread_cond_broadcast пробуждает все потоки, ожидающие в условной переменной (condvar).И эти пробужденные потоки будут удерживать блокировку мьютекса и возвращаться из pthread_cond_wait .

Но меня смущает то, что блокировка мьютекса должна удерживаться только одним потоком в одном и том жевремя?

Заранее спасибо.

1 Ответ

2 голосов
/ 24 июля 2011

Переменные условия работают так:

/* Lock a mutex. */
pthread_mutex_lock(&mtx);

/* Wait on condition variable. */
while (/* condition *.)
    pthread_cond_wait(&cond, &mtx);

/* When pthread_cond_wait returns mtx is atomically locked. */

/* ... */

/* Unlock the mutex. */
pthread_mutex_unlock(&mtx);

Итак, главное, что нужно понять, это то, что многие потоки могут проснуться при отправке трансляции, но только один "выиграет" гонку и фактически заблокирует mtx и выйдет из цикла.

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