是否有与 Java 的CountDownLatch等效的 C# ?
问问题
10412 次
2 回答
25
.NET Framework 版本 4 包括新的System.Threading.CountdownEvent类。
于 2009-12-07T01:24:25.690 回答
17
这是一个简单的实现(来自9 Reusable Parallel Data Structures and Algorithms):
要构建倒计时锁存器,您只需将其计数器初始化为 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(); } }
于 2009-12-07T01:21:08.787 回答