Условные переменные и порядок получения нотификаций
От: DTF  
Дата: 07.06.20 13:57
Оценка:
Добрый день.

Пусть есть мьютекс и условная переменная:
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();


Далее, этот поток что-то делает (или не делает), после чего берет лок и ждет, аналогично другим потокам (см. код выше).

Вопрос:
Есть ли гарантия, что поток-поставщик получит лок во второй раз строго после того, как все,
кто ожидал во время нотификации получили эту нотификацию и проверили свои предикаты?
Если да, то можно ссылку на стандарт?
Если нет, то как можно сделать такую упорядоченность?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.