Что происходит, если нет ожидающих потоков и был отправлен сигнал состояния? - PullRequest
3 голосов
/ 07 марта 2012

Что произойдет, если все потоки заняты и основной поток отправил сигнал cond потока?

1 основная нить и 3 нити в пуле потоков. 3 нитки в статусе

    pthread_mutex_lock(&sync_mutex);
    pthread_cond_wait(&sync_cond, &sync_mutex);
    pthread_mutex_unlock(&sync_mutex);

Основной поток отправил сигнал, чтобы разбудить потоки для обработки работы. В этой ситуации, что делать, если 3 потока уже заняты и поступил следующий сигнал?

Ответы [ 2 ]

8 голосов
/ 07 марта 2012

Ничего. Сигнал исчезает.

4 голосов
/ 07 марта 2012

Если вы используете одну из следующих функций:

pthread_cond_signal - перезапускает один из потоков, ожидающих условной переменной cond. pthread_cond_broadcast - разбудить все потоки, заблокированные указанной условной переменной.

В руководстве указано, что

Функции pthread_cond_broadcast () и pthread_cond_signal () не будет иметь эффекта, если в данный момент нет заблокированных потоков конд.

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