Существует ли эквивалент C# CountDownLatch Java?

Тахома очень читаем. Если Вам нужен он больше, тогда используют Verdana.
21
задан Joey 7 December 2009 в 01:22
поделиться

2 ответа

.NET Framework версии 4 включает новый класс System.Threading.CountdownEvent .

22
ответ дан 29 November 2019 в 20:39
поделиться

Вот простая реализация (из 9 многоразовых параллельных структур данных и алгоритмов ):

Чтобы создать защелку обратного отсчета, вы просто инициализировать его счетчик на n и иметь каждая подчиненная задача атомарно уменьшите его на единицу, когда он закончится, например, окружая операция уменьшения с блокировкой или с вызовом Interlocked.Decrement. Тогда вместо операции взятия поток может уменьшиться и ждать счетчик стать нулевым; когда проснулся, он будет знать, что n сигналов были зарегистрированы с защелкой. Вместо того, чтобы вращаться по этому условию, как в while (count! = 0), обычно хорошая идея позволить ожидающему потоку блок, и в этом случае вам нужно использовать событие.

 открытый класс CountdownLatch {
 частный int m_remain;
 private EventWaitHandle m_event;

 public CountdownLatch (int count) {
 m_remain = количество;
 m_event = новый ManualResetEvent (false);
 }

 public void Signal () {
 // Последний поток для сигнала также устанавливает событие.
 если (Interlocked.Decrement (ref m_remain) == 0)
 m_event.Set ();
 }

 public void Wait () {
 m_event.WaitOne ();
 }
}
18
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: