У меня проблема с пространством System.Threading
Microsoft.NET. В этом пространстве имен многие классы определены, чтобы помочь мне управлять потоками.
Ну, у меня проблема, но я не знаю, что использовать, MSDN расплывчата, и я до сих пор не понял, что делают классы. в частности, моя проблема связана с синхронизацией.
Проблема
У меня есть определенное количество потоков (рассмотрим N потоков). В определенный момент поток должен останавливаться и ждать, пока хотя бы один из других потоков ничего не сделает. Как только один из потоков N - 1 выполнил определенную задачу, этот поток уведомляет об этом и останавливается поток.
Итак, это всего лишь проблема синхронизации: поток должен ждать, чтобы его сигнализировали, что все.
Множество классов
В System.Threading
существует множество классов, предназначенных для решения проблем синхронизации. Существуют WaitHandle
(s), существуют AutoResetEvent
(s), существуют ManualResetEvent
(s) и т.д....
Какой я использую?
Вопрос
Мой вопрос: может ли кто-нибудь обобщить меня, какой класс я должен использовать, чтобы решить мою проблему? Не могли бы вы рассказать о самых важных различиях между этими классами или другими классами?
Дело в том, что я действительно не понял, на какой класс отвечает вопрос синхронизации: в чем разница, например, между WaitHandle
и AutoResetEvent
или ManualResetEvent
?
Как насчет блокировки?
Для обработки многих проблем с потоками .net предоставляет функции lock
и класс Monitor
. Эта пара хороша для моих нужд?
Thankyou