Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement