Re[2]: C++11: Синхронизация - Условные переменные и ложные проб
От: B0FEE664  
Дата: 27.03.19 15:50
Оценка:
Здравствуйте, netch80, Вы писали:

N>Настоящая и исконная причина: в multi-producer-multi-customer построении невозможно гарантировать, что когда потребителю A "свистнули", что появился ресурс, не придёт потребитель B, который захватит мьютекс раньше и потребит ресурс. Когда же B отпустит мьютекс и A получит такую возможность, ему уже может не достаться ресурса, он увидит другое состояние, чем предполагалось на момент отдачи нотификации.


О каком ресурсе (состоянии) идёт речь? У condition_variable нет никакого состояния, кроме одного мьютекса на всех.

N>Если кто-то спросит, почему не делать такую синхронизацию, при которой нет такой проблемы... можно сделать. Например, при notifyOne() указывать, кого именно notify.

Т.е. указывать нить?

N>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?

Это как? У нити нет способа "выйти из игры", она же заблокирована.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.