C++11 Могу ли я гарантировать, что условие _variable.wait ()не пропустит уведомление?

У меня есть поток 1, выполняющий следующий код:

unique_lock<mutex> ul(m);
while(condition == true)
    cv.wait(ul);

И поток 2, выполняющий этот код:

condition = false;
cv.notify_one();

К сожалению, я столкнулся с проблемой синхронизации:

T1: condition checks true
                            T2: condition set to false
                            T2: cv.notify_one()
T1: cv.wait()

Поток 1 полностью пропускает уведомление и остается заблокированным в ожидании (). Я попытался использовать версию wait (), которая принимает предикат, но практически с тем же результатом. То есть тело предиката выполняет проверку, но перед его возвратом значение условия изменяется и отправляется уведомление. Затем предикат возвращается.

Как я могу это исправить?

6
задан ks1322 1 November 2016 в 20:48
поделиться