C#是否等同于Java的CountDownLatch?
答案 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(); } }