[英]Is there a C# equivalent to Java's CountDownLatch?
.NET Framework版本4包含新的System.Threading.CountdownEvent類。
這是一個簡單的實現(來自9個可重用的並行數據結構和算法 ):
要構建倒計時鎖存器,只需將其計數器初始化為n,並使每個子服務任務在完成時以原子方式將其減1,例如通過使用鎖定或通過調用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(); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.