История изменений
Исправление ox55ff, (текущая версия) :
cvPut.notify_all();
mtx.unlock();
Сначала освобождай мьютекс, а только потом сигналь потокам. Но я вручную не вызываю unlock. Вместо этого блок кода с мьютексом оборачиваю в {}, чтобы сократить время жизни unique_lock.
void func()
{
{
std::unique_lock lk(m);
cv.wait(lk, []{return ready;});
...
} // Здесь мьютекс освободится
cv.notify_one();
}
Исходная версия ox55ff, :
cvPut.notify_all(); mtx.unlock();
Сначала освобождай мьютекс, а только потом сигналь потокам. Но я вручную не вызываю unlock. Вместо этого блок кода с мьютексом оборачиваю в {}, чтобы сократить время жизни unique_lock.
void func()
{
{
std::unique_lock lk(m);
cv.wait(lk, []{return ready;});
...
} // Здесь мьютекс освободится
cv.notify_one();
}