Здравствуйте!
Пишу программу для обработки текста из файла. Код построен по принципу "поставщик-потребитель". Для блокирования потребителя использую condition_variable. При использовании первой перегрузки метода wait (без предиката) всё работает нормально. Но, если использовать вторую перегрузку, с предикатом, то получается вот такая ситуация: поставщику достаточно отправить хотя бы один сигнал, чтобы ожидающий поток потребителя разблокировался и больше он уже не блокируется, даже если сигнал не был больше послан. Хочу обратить внимание, что данное поведение имеет место быть только при использовании предиката (я в лямбда-выражении проверяю, что очередь не пуста). Почему так происходит?
Заранее спасибо!
Код:
unique_lock<mutex> lockM(signalMutex);
conVar.wait(lockM, []{return !Producer::dataProcessing.empty(); });
buffer = Producer::dataProcessing.front();
Producer::dataProcessing.pop();
lockM.unlock();