Здраствуйте. Может ли кто подсказать насчёт безопасности использования условных переменных с блокировкой вида fake_lock?
Краткое описание ситуации: есть некоторое условие, которого нужно уметь ждать из другого потока. Это условие задаётся атомарной переменной, поэтому дополнительная блокировка кажется излишней. Изменения, произведённые рабочим потоком(тот, который атомик выставляет в значение, ожидаемое другими потоками) будут видны в остальных после завершения ожидания, поскольку:
30.5 Condition variables
4 The implementation shall behave as if all executions of notify_one, notify_all, and each part of the wait, wait_for, and wait_until executions are executed in a single unspecified total order consistent with the «happens before» order.
Но есть одна проблема:
30.5 Condition variables
3 The execution of wait, wait_for, and wait_until shall be performed in three atomic parts:
1. the release of the mutex and entry into the waiting state;
2. the unblocking of the wait; and
3. the reacquisition of the lock.
- проверка предиката и переход в состояние ожидания выполняются НЕ атомарно.
Это означает возможность потери сигнала пробуждения?