LINUX.ORG.RU

История изменений

Исправление 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();
}