Добрый день.
Пусть есть мьютекс и условная переменная:
std::mutex m;
std::condition_variable cv;
Один или несколько потоков ждут на этой переменной:
std::unique_lock lock(m);
while (!predicate()) {
cv.wait(lock);
}
Есть еще поток, который делает следующее:
std::unique_lock lock(m);
store_data(); // формирует данные, которых ждут остальные
cv.nofify_all();
lock.unlock();
Далее, этот поток что-то делает (или не делает), после чего берет лок и ждет, аналогично другим потокам (см. код выше).
Вопрос:
Есть ли гарантия, что поток-поставщик получит лок во второй раз строго после того, как все,
кто ожидал во время нотификации получили эту нотификацию и проверили свои предикаты?
Если да, то можно ссылку на стандарт?
Если нет, то как можно сделать такую упорядоченность?