是否有一个C#等同于Java的CountDownLatch?

时间:2009-12-07 01:19:28

标签: c# multithreading synchronization countdownlatch

C#是否等同于Java的CountDownLatch

2 个答案:

答案 0 :(得分:22)

.NET Framework版本4包含新的System.Threading.CountdownEvent类。

答案 1 :(得分:17)

这是一个简单的实现(来自9 Reusable Parallel Data Structures and Algorithms):

  

要建立一个倒计时锁存器,你就是   将其计数器初始化为n,并且具有   每个从属任务都是原子的   完成后减1   例如通过围绕   用锁或减少操作   打电话给Interlocked.Decrement。   然后,而不是采取操作,a   线程可以减少并等待   计数器变为零;什么时候   醒来,它会知道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();
    }
}