Spurios просыпаются и переменные условия

Я читал это
хороший блог от A Williams:

http://www.justsoftwaresolutions.co.uk/threading/condition-variable-spurious-wakes.html

и меня беспокоит одна вещь:
когда поток просыпается из-за ложного пробуждения, блокируется ли мьютекс?

boost::mutex::scoped_lock lock(the_mutex);
while(the_queue.empty())
{
the_condition_variable.wait(lock);
}

Я думаю, потому что в противном случае вызов .empty будет небезопасным, но я не уверен.

2

Решение

Да, мьютекс заблокирован. По сути, мьютекс освобождается только тогда, когда поток заблокирован в the_condition_variable.wait(), Ложное пробуждение или нет, мьютекс заблокирован везде в коде, который вы показываете.

От документация за boost::condition_variable::wait():

Постусловие:

lock заблокирован текущим потоком.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]