Подтвердить что ты не робот

Есть ли эквивалент С# для Java CountDownLatch?

Есть ли эквивалент С# для Java CountDownLatch?

4b9b3361

Ответ 2

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

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

public class CountdownLatch {
    private int m_remain;
    private EventWaitHandle m_event;

    public CountdownLatch(int count) {
        m_remain = count;
        m_event = new ManualResetEvent(false);
    }

    public void Signal() {
        // The last thread to signal also sets the event.
        if (Interlocked.Decrement(ref m_remain) == 0)
            m_event.Set();
    }

    public void Wait() {
        m_event.WaitOne();
    }
}