У меня есть следующий код: где m_event является повышение :: condition_variableПочему я должен иметь boost :: mutex для boost :: condition_variable?
boost::scoped_lock dummy;
boost::unique_lock<boost::scoped_lock> lock(dummy); // TODO: see if dummy is correct
m_event.wait(lock, [this]() {
return !this ->m_enqueue.empty();
});
Я действительно не нужно, что кукла шкафчик я просто хочу, чтобы событие, чтобы остановить на определенное логическое условие, я не понять что-то?
Почему я вынужден использовать фиктивный замок?
(PS код работает отлично ..)
EDIT: На самом деле, если я правильно понял, что у меня есть в моем классе является повышение :: мьютекс, давайте назовем это m_mtx и очевидные Inserters к m_enqueue .. поэтому я меняю осуществление соответственно к замку, чтобы зафиксировать на m_lock, а затем Inserters бы только сделать:
boost::mutex::scoped_lock<boost::mutex> guard(m_lock);
имеет смысл?
См. [Этот предыдущий ответ] (http://stackoverflow.com/questions/13099660/c11-why-does-stdcondition-variable-use-stdunique -lock) –
@ichramm: Это вопрос! И [это немного отличается] (http://stackoverflow.com/questions/13099660/c11-why-does-stdcondition-variable-use-stdunique-lock#comment17804829_13099660), при этом ... –