Лучшее совпадение в C # с Java ReentrantLock и Условие? - PullRequest
8 голосов
/ 05 марта 2009

Еще один междисциплинарный вопрос: может кто-нибудь сказать мне, какие конструкции C # Threading лучше всего соответствуют классам Java ReentrantLock и Condition? ReentrantLock имеет методы lockInterruptibly () и unlock (), в то время как Condition имеет методы signal () и await (). Именно эту комбинацию я хотел бы сохранить в коде C # - или что-то подобное ... Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 05 марта 2009

Я думаю, вам нужен статический класс Monitor . Я допускаю блокирование и неблокирующее получение мьютекса, а также условную переменную операций. (Они называют их Pulse , PulseAll и Ждите вместо того, чтобы сигнализировать и ждать).

1 голос
/ 31 июля 2009

Класс ReaderWriterLock также заслуживает изучения. Это похоже на ReentrantReadWriteLock в Java.

0 голосов
/ 05 марта 2009

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Я не знаю эти классы Java, здесь я получаю удар в темноте.

В C # у вас есть оператор lock (я думаю, это что-то вроде оператора synchronized в Java), который может блокировать любой объект. Я полагаю, что использование этого оператора или Monitor.Enter(obj) и Monitor.Exit(obj) будет немного похоже на ReentrantLock.

Есть два класса с именами ManualResetEvent и AutoResetEvent. Эти классы имеют метод Wait и метод Set, который, как я полагаю, похож на сигнал Condition и ожидает. Разница между этими двумя классами заключается в том, что ManualResetEvent остается установленным (больше никого не блокирует) и должно быть Reset. И AutoResetEvent - как и предполагает его название - автоматически сбрасывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...