thread - ¿Hay un C#equivalente a CountDownLatch de Java?
synchronized c# method (2)
Aquí hay una implementación simple (de 9 estructuras de datos y algoritmos paralelos reutilizables ):
Para generar un cierre de cuenta atrás, simplemente inicialice su contador en n, y haga que cada tarea subordinada la disminuya de forma atómica cuando finalice, por ejemplo, rodeando la operación de disminución con un bloqueo o con una llamada a Interlocked. Luego, en lugar de una operación de toma, un hilo podría disminuir y esperar a que el contador se vuelva cero; cuando se despierte, sabrá que se han registrado n señales con el pestillo. En lugar de girar en esta condición, como en while (¡cuenta! = 0), generalmente es una buena idea dejar que el hilo de espera se bloquee, en cuyo caso tendrá que usar un evento.
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(); } }
¿Hay un C # equivalente a CountDownLatch de Java?
La versión 4 de .NET Framework incluye la nueva clase System.Threading.CountdownEvent .