簡體   English   中英

是否有一個C#等同於Java的CountDownLatch?

[英]Is there a C# equivalent to Java's CountDownLatch?

是否有一個C#等同於Java的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM