У меня есть какой-то цикл, который работает параллельно и имеет следующие строки:
std::unique_lock <std::mutex> lock(_condLoopMutex);
_condLoopCondition.wait(lock, [this]() { return _conditionReady || _condLoopStopped; });
_conditionReady = false;
// DO SOMETHING
логическая переменная
_conditionReady
устанавливается в параллельном потоке с помощью следующей конструкции:
_conditionReady = true;
_condLoopCondition.notify_one();
Однако иногда моя программа зависает. Кажется, что уведомление приходит между функцией 'wait', передает аргументы и проверяет переменную '_conditionReady'.
Чтобы избежать этого, я реализовал следующее:
while (_conditionReady && !_condLoopStopped)
{
_condLoopCondition.notify_one();
std::this_thread::sleep_for(std::chrono::microseconds(100));
}
чтобы он продолжал уведомлять до
_conditionReady == false
, что означает, что ожидание окончено.
Это единственное решение этой проблемы - ренотификация до окончания ожидания? Есть ли другой обычный метод решения этих проблем?