Java のCountDownLatchに相当する C# はありますか?
10412 次
2 に答える
25
.NET Framework バージョン 4 には、新しいSystem.Threading.CountdownEventクラスが含まれています。
于 2009-12-07T01:24:25.690 に答える
17
これは簡単な実装です(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(); } }
于 2009-12-07T01:21:08.787 に答える