Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created July 10, 2015 14:05

Revisions

  1. Fhernd created this gist Jul 10, 2015.
    55 changes: 55 additions & 0 deletions ConteoThreadsFinalizados.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    // 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();
    }
    }
    }