У меня проблемы с синхронизацией потоков в C #. У меня есть общий объект, которым манипулируют два потока, я сделал доступ к объекту взаимоисключающим, используя lock (), но я также хочу заблокировать каждый поток в зависимости от состояния общего объекта. Специально блокируйте поток A, когда объект пуст, блокируйте поток B, когда объект заполнен, и пусть другой поток сигнализирует заблокированный поток, когда состояние объекта изменяется.
Я попытался сделать это с ManualResetEvent, но столкнулся с состоянием гонки, когда поток B обнаружит, что объект заполнен, переместится в WaitOne, и поток A войдет и опустошит объект (сигнализируя MRE о каждом доступе и заблокировать себя, как только объект пуст), прежде чем поток A достигнет своего WaitOne, что означает, что поток A ожидает, пока поток не будет заполнен, даже если это не так.
Я полагаю, что если бы я мог вызвать такую функцию, как 'SignalAndWaitOne', которая бы атомарно сигнализировала перед ожиданием, это предотвратило бы это состояние гонки?
Спасибо!