Сообщение Re[3]: C++11: Синхронизация - Условные переменные и ложные п от 27.03.2019 16:00
Изменено 28.03.2019 7:00 netch80
Re[3]: C++11: Синхронизация - Условные переменные и ложные проб
Здравствуйте, B0FEE664, Вы писали:
N>>Настоящая и исконная причина: в multi-producer-multi-customer построении невозможно гарантировать, что когда потребителю A "свистнули", что появился ресурс, не придёт потребитель B, который захватит мьютекс раньше и потребит ресурс. Когда же B отпустит мьютекс и A получит такую возможность, ему уже может не достаться ресурса, он увидит другое состояние, чем предполагалось на момент отдачи нотификации.
BFE>О каком ресурсе (состоянии) идёт речь?
О том, который защищается данной конкретной парой mutex + CV.
N>>Если кто-то спросит, почему не делать такую синхронизацию, при которой нет такой проблемы... можно сделать. Например, при notifyOne() указывать, кого именно notify.
BFE>Т.е. указывать нить?
Да.
N>>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?
BFE>Это как? У нити нет способа "выйти из игры", она же заблокирована.
С чего вдруг? В данный момент она может, например, быть занята обработкой предыдущего задания.
N>>Настоящая и исконная причина: в multi-producer-multi-customer построении невозможно гарантировать, что когда потребителю A "свистнули", что появился ресурс, не придёт потребитель B, который захватит мьютекс раньше и потребит ресурс. Когда же B отпустит мьютекс и A получит такую возможность, ему уже может не достаться ресурса, он увидит другое состояние, чем предполагалось на момент отдачи нотификации.
BFE>О каком ресурсе (состоянии) идёт речь?
О том, который защищается данной конкретной парой mutex + CV.
N>>Если кто-то спросит, почему не делать такую синхронизацию, при которой нет такой проблемы... можно сделать. Например, при notifyOne() указывать, кого именно notify.
BFE>Т.е. указывать нить?
Да.
N>>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?
BFE>Это как? У нити нет способа "выйти из игры", она же заблокирована.
С чего вдруг? В данный момент она может, например, быть занята обработкой предыдущего задания.
Re[3]: C++11: Синхронизация - Условные переменные и ложные п
Здравствуйте, B0FEE664, Вы писали:
N>>Настоящая и исконная причина: в multi-producer-multi-customer построении невозможно гарантировать, что когда потребителю A "свистнули", что появился ресурс, не придёт потребитель B, который захватит мьютекс раньше и потребит ресурс. Когда же B отпустит мьютекс и A получит такую возможность, ему уже может не достаться ресурса, он увидит другое состояние, чем предполагалось на момент отдачи нотификации.
BFE>О каком ресурсе (состоянии) идёт речь?
О том, который защищается данным конкретным мьютексом.
N>>Если кто-то спросит, почему не делать такую синхронизацию, при которой нет такой проблемы... можно сделать. Например, при notifyOne() указывать, кого именно notify.
BFE>Т.е. указывать нить?
Да.
N>>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?
BFE>Это как? У нити нет способа "выйти из игры", она же заблокирована.
С чего вдруг? В данный момент она может, например, быть занята обработкой предыдущего задания
N>>Настоящая и исконная причина: в multi-producer-multi-customer построении невозможно гарантировать, что когда потребителю A "свистнули", что появился ресурс, не придёт потребитель B, который захватит мьютекс раньше и потребит ресурс. Когда же B отпустит мьютекс и A получит такую возможность, ему уже может не достаться ресурса, он увидит другое состояние, чем предполагалось на момент отдачи нотификации.
BFE>О каком ресурсе (состоянии) идёт речь?
О том, который защищается данным конкретным мьютексом.
N>>Если кто-то спросит, почему не делать такую синхронизацию, при которой нет такой проблемы... можно сделать. Например, при notifyOne() указывать, кого именно notify.
BFE>Т.е. указывать нить?
Да.
N>>Но тогда другая проблема — а что, если этот решил вообще выйти из игры?
BFE>Это как? У нити нет способа "выйти из игры", она же заблокирована.
С чего вдруг? В данный момент она может, например, быть занята обработкой предыдущего задания