Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created July 10, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fhernd/2c459a9351255ce2de30 to your computer and use it in GitHub Desktop.
Save Fhernd/2c459a9351255ce2de30 to your computer and use it in GitHub Desktop.
Uso de la clase CountdownEvent en C#.
// OrtizOL - xCSw - http://ortizol.blogspot.com
using System;
using System.Threading;
namespace Receta.Multithreading.R0506
{
public class NotificacionMultiplesThreads
{
// Instancia de `CountdownEvent` para llevar el control
// de conteo de threads que han generado una señal de
// registro:
public static CountdownEvent contadorFinalizacion =
new CountdownEvent(3);
public static void Main(string[] args)
{
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Tres threads a punto de iniciar su ejecución...");
Thread t1 = new Thread(() => EjecutarProceso("Proceso #1", 3));
Thread t2 = new Thread(() => EjecutarProceso("Proceso #2", 5));
Thread t3 = new Thread(() => EjecutarProceso("Proceso #2", 8));
// Inicio de la ejecución de los tres threads:
t1.Start();
t2.Start();
t3.Start();
// Bloquea a `Main` mientras que el contador (3) llega
// a cero (0):
contadorFinalizacion.Wait();
Console.WriteLine("\nLas tres operaciones han finalizado.");
// BUENA PRÁCTICA: Liberar los recursos ocupados por el
// objeto `CountdownEvent`:
contadorFinalizacion.Dispose();
Console.WriteLine(Environment.NewLine);
}
public static void EjecutarProceso(string nombreProceso, int espera)
{
// Simula la ejecución de una tarea larga:
Thread.Sleep(TimeSpan.FromSeconds(espera));
Console.WriteLine("Ejecutándose `{0}`.", nombreProceso);
// Registro de señal de finalización:
contadorFinalizacion.Signal();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment