Должен ли поток всегда использовать цикл while для хранения оператора pthread_cond_wait? - PullRequest
0 голосов
/ 11 ноября 2019

Я понимаю, что в pthreads могут происходить ложные пробуждения потоков. Следующее обсуждение было интересным и информативным: Почему pthread_cond_wait имеет ложные пробуждения? . Мой вопрос может быть очевидным, но я хочу убедиться, что я правильно понимаю. Когда @acm делает утверждение, что «... вам всегда нужно проверять предикат в цикле», это означает, что мы должны использовать цикл while для проверки условия, а не для оператора for, так как первый будет-проверить, что условие истинно, в то время как последнее позволило бы, казалось бы, ложно пробужденному потоку продолжать выполнение, даже если условие может больше не выполняться, когда оно достигает ЦП?

1 Ответ

0 голосов
/ 11 ноября 2019

Когда @acm делает утверждение, что «... вам всегда нужно проверять предикат в цикле», это означает, что мы должны использовать цикл while для проверки условия, а не для оператора for,

Как уже говорилось в R, нет разницы между:

while (!predicate()) {
  pthread_condition_wait(...);
}

и

for (...; !predicate(); ...) {
  pthread_condition_wait(...);
}

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

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