Может ли поток, ожидающий на изменяемой переменной, быть разбужен сигналом, излучаемым до его ожидания - PullRequest
1 голос
/ 09 мая 2019

Есть ли вероятность того, что поток t, ожидающий условной переменной cond, будет пробужден другим потоком t' (где t' может фактически быть t), сигнализирующим до того, как t ожидал?

Я пытался создать программу на С, которая делает это 1000 раз, но этого не происходит, также я прочитал справочные страницы о сигнале и ожидании, но не могу найти ответ.

Вот пример того, как это может выглядеть в одном потоке

pthread_cond_signal(&cond);
pthread_cond_wait(&cond, &mutex); //Is there a chance that this wait gets cancelled by the signal above

Спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Может ли поток, ожидающий условной переменной, быть разбужен сигналом, излучаемым до его ожидания.

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

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

1 голос
/ 09 мая 2019

Нет. Функция ...signal(&cond) вообще ничего не делает, если нет другого ожидающего потока.

...