using System;
using System.Threading;
namespace Recetas.CSharp.Cap04.R0409
{
public class BaseDeDatos
{
private static Mutex mutex = new Mutex();
public static void EscribirDatos(string datos)
{
// Bloqueo y posesión del recurso compartido:
mutex.WaitOne();
Console.WriteLine ("La ejecución de `EscribirDatos` ha iniciado.");
Console.WriteLine ("`EscribirDatos` en ejecución...");
for (int i = 1; i <= 10; ++i)
{
Thread.Sleep (100);
Console.WriteLine (datos);
}
Console.WriteLine ("\n`EscribirDatos` ha terminado.");
mutex.ReleaseMutex();
}
}
public sealed class AccesoBaseDatosMutex
{
public static void Main()
{
Console.Title = "Acceso a Base de Datos Sincronizado con Mutex";
Console.WriteLine ();
// Crea dos threads:
Thread t1 = new Thread (TareaEscribirDatos1);
Thread t2 = new Thread (TareaEscribirDatos2);
t1.Start();
t2.Start();
Console.WriteLine ();
}
private static void TareaEscribirDatos1()
{
Console.WriteLine ("Primera tarea de escribir datos iniciada.");
BaseDeDatos.EscribirDatos ("Blog");
Console.WriteLine ("La tarea no. 1 ha finalizado");
}
private static void TareaEscribirDatos2()
{
Console.WriteLine ("Segunda tarea de escribir datos iniciada.");
BaseDeDatos.EscribirDatos ("xCSw");
Console.WriteLine ("La tarea no. 2 ha finalizado");
}
}
}