У меня есть следующая проблема с синхронизацией:C# Какой класс синхронизации использовать?
Несколько нитей выборочно проверяют, выполнено ли какое-либо условие. Если контрольная нить обнаруживает, что условие не выполнено, оно должно блокироваться, пока другой поток не выполнит условие и тем самым освободит все ожидающие/заблокированные потоки.
Имеет ли .NET такой класс syncrhonizing, который я могу использовать? Или мне придется создать собственный класс синхронизации поверх чего-то еще?
Что мне нужно, это просто семафоров как класс только с этими двумя методами:
BOOL Wait (TimeSpan maxTimeToWait) // блокирует любую caling нить, пока другой поток не вызывает сигнала() (или тайм-аут - возвращаемое значение покажет, что произошло)
void Signal() // выпускает все ожидающие темы.
С уважением, Мартин.
http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent%28v=vs.110%29.aspx? – bas
Это звучит как задание для [Класс монитора] (http://msdn.microsoft.com/en-us/library/system.threading.monitor%28v=vs.110%29.aspx). –
Для этого можно использовать почти все примитивы synchzatıon, но неясно, что вы действительно хотите сделать. Возможно, могут быть лучшие способы, чем говорить * использовать это *. (Например, «Множественные потоки, случайно проверяющие, выполняется ли какое-либо условие», могут не понадобиться и могут быть просто реализованы с помощью примитивов синхронизации) –