Примитивы синхронизации в .NET Framework: какой из них лучше?

У меня проблема, связанная с пространством имен System.Threading Microsoft .NET. В этом пространстве имен определены многие классы, чтобы помочь мне управлять потоками. Что ж, у меня проблема, но я не знаю, что использовать, MSDN расплывчата, и я до сих пор не понимаю, какие классы что делают. в частности, моя проблема касается синхронизации.

Проблема

У меня есть определенное количество потоков (рассмотрим N потоков). В определенный момент поток должен остановиться и ждать, пока хотя бы один из других потоков что-то сделает. Как только один из N - 1 потоков выполнил определенную задачу, этот поток уведомляет, и остановленный поток сможет продолжить.

Так что это просто проблема синхронизации: поток должен ждать сигнала, вот и все.

Множество классов

В System.Threading предусмотрено множество классов для решения проблем синхронизации. Есть WaitHandle (s), есть AutoResetEvent (s), есть ManualResetEvent (s) и так далее ...

Который должен Я использую?

Вопрос

Мой вопрос: может ли кто-нибудь резюмировать мне, какой класс мне следует использовать для решения моей проблемы? Не могли бы вы рассказать о наиболее важных различиях между этими или другими классами?

Дело в том, что я не совсем понял, какой класс отвечает за синхронизацию: в чем разница, например, между WaitHandle и AutoResetEvent или ManualResetEvent ?

А как насчет блокировки?

Для решения многих проблем с потоками .net предоставляет блокировку и класс Monitor . Подходит ли эта пара для моих нужд?

Спасибо

21
задан Paul R 16 June 2011 в 12:48
поделиться