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"); } } }