QWaitCondition - возможны ли spurious wakes?
От: Alexander G Украина  
Дата: 17.04.17 11:43
Оценка:
В отличии от std::wait_condition, документация не предупреждает про spurious wakes.
И нет предикатной перегрузки.

Т.е. spurious wakes для QWaitCondition не бывает?
Русский военный корабль идёт ко дну!
Re: QWaitCondition - возможны ли spurious wakes?
От: uzhas Ниоткуда  
Дата: 17.04.17 11:58
Оценка: 7 (1)
Здравствуйте, Alexander G, Вы писали:

AG>Т.е. spurious wakes для QWaitCondition не бывает?


гуглится за 30 сек
https://woboq.com/blog/qwaitcondition-solving-unavoidable-race.html

Notice that QWaitCondition already protects against spurious wakeup (see the `while(/*...*/ d->wakeups == 0)` )

Re[2]: QWaitCondition - возможны ли spurious wakes?
От: Alexander G Украина  
Дата: 17.04.17 12:06
Оценка: :)
Здравствуйте, uzhas, Вы писали:

U>гуглится за 30 сек


Я за 30 сек смог найти ответ на SO, где предлагают внешний цикл вокруг QWaitCondition::wait
Русский военный корабль идёт ко дну!
Re: QWaitCondition - возможны ли spurious wakes?
От: SaZ  
Дата: 19.10.21 10:56
Оценка:
Немного понекрофилю.

Что-то не могу найти в документации по QWaitCondition о том что там невозможны спонтанные пробуждения. Кто-то может подсказать, есть ли там отличия по сравнению с C++ версией?
Re[2]: QWaitCondition - возможны ли spurious wakes?
От: Alexander G Украина  
Дата: 19.10.21 12:54
Оценка: 2 (1)
Здравствуйте, SaZ, Вы писали:

SaZ>Что-то не могу найти в документации по QWaitCondition о том что там невозможны спонтанные пробуждения. Кто-то может подсказать, есть ли там отличия по сравнению с C++ версией?


Там написано:

The lockedMutex will be unlocked, and the calling thread will block until either of these conditions is met:
* Another thread signals it using wakeOne() or wakeAll(). This function will return true in this case.
* the deadline given by deadline is reached. If deadline is QDeadlineTimer::Forever (the default), then the wait will never timeout (the event must be signalled). This function will return false if the wait timed out.

Третьего не дано.
Русский военный корабль идёт ко дну!
Re[3]: QWaitCondition - возможны ли spurious wakes?
От: SaZ  
Дата: 19.10.21 13:26
Оценка: +1
Здравствуйте, Alexander G, Вы писали:

AG>Там написано:


AG>The lockedMutex will be unlocked, and the calling thread will block until either of these conditions is met:

AG>* Another thread signals it using wakeOne() or wakeAll(). This function will return true in this case.
AG>* the deadline given by deadline is reached. If deadline is QDeadlineTimer::Forever (the default), then the wait will never timeout (the event must be signalled). This function will return false if the wait timed out.

AG>Третьего не дано.


Блин, ну могли бы явно написать в документации. Тема то скользкая.
Отредактировано 19.10.2021 13:36 SaZ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.