У меня есть поток 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 (), которая принимает предикат, но практически с тем же результатом. То есть тело предиката выполняет проверку, но перед его возвратом значение условия изменяется и отправляется уведомление. Затем предикат возвращается.
Как я могу это исправить?