Re[5]: C++11: Синхронизация - Условные переменные и ложные проб
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 27.03.19 18:45
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, netch80, Вы писали:


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

BFE>>>О каком ресурсе (состоянии) идёт речь?
N>>О том, который защищается данной конкретной парой mutex + CV.
BFE>Речь идёт о notifyOne()?

Нет, здесь — в общем случае.

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

N>>>>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?
BFE>>>Это как? У нити нет способа "выйти из игры", она же заблокирована.
N>>С чего вдруг? В данный момент она может, например, быть занята обработкой предыдущего задания.
BFE>Нить, которая занята обработкой предыдущего задания, пропустит notifyOne() в соответствии с текущей спецификацией.

И поэтому этот гипотетический метод нужно ещё больше дорабатывать.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.