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

前端 未结 2 849
猫巷女王i
猫巷女王i 2020-12-15 05:52

Is there a C# equivalent to Java\'s CountDownLatch?

相关标签:
2条回答
  • 2020-12-15 06:04

    The .NET Framework version 4 includes the new System.Threading.CountdownEvent class.

    0 讨论(0)
  • 2020-12-15 06:10

    Here is a simple implementation (from 9 Reusable Parallel Data Structures and Algorithms):

    To build a countdown latch, you just initialize its counter to n, and have each subservient task atomically decrement it by one when it finishes, for example by surrounding the decrement operation with a lock or with a call to Interlocked.Decrement. Then, instead of a take operation, a thread could decrement and wait for the counter to become zero; when awoken, it will know that n signals have been registered with the latch. Instead of spinning on this condition, as in while (count != 0), it’s usually a good idea to let the waiting thread block, in which case you then have to use an event.

    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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题