fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.CSharp.Cap04.R0409
  5. {
  6. public class BaseDeDatos
  7. {
  8. private static Mutex mutex = new Mutex();
  9.  
  10. public static void EscribirDatos(string datos)
  11. {
  12. // Bloqueo y posesión del recurso compartido:
  13. mutex.WaitOne();
  14.  
  15. Console.WriteLine ("La ejecución de `EscribirDatos` ha iniciado.");
  16. Console.WriteLine ("`EscribirDatos` en ejecución...");
  17. for (int i = 1; i <= 10; ++i)
  18. {
  19. Thread.Sleep (100);
  20. Console.WriteLine (datos);
  21. }
  22. Console.WriteLine ("\n`EscribirDatos` ha terminado.");
  23. mutex.ReleaseMutex();
  24. }
  25. }
  26.  
  27. public sealed class AccesoBaseDatosMutex
  28. {
  29. public static void Main()
  30. {
  31. Console.Title = "Acceso a Base de Datos Sincronizado con Mutex";
  32. Console.WriteLine ();
  33.  
  34. // Crea dos threads:
  35. Thread t1 = new Thread (TareaEscribirDatos1);
  36. Thread t2 = new Thread (TareaEscribirDatos2);
  37.  
  38. t1.Start();
  39. t2.Start();
  40.  
  41. Console.WriteLine ();
  42. }
  43.  
  44. private static void TareaEscribirDatos1()
  45. {
  46. Console.WriteLine ("Primera tarea de escribir datos iniciada.");
  47. BaseDeDatos.EscribirDatos ("Blog");
  48. Console.WriteLine ("La tarea no. 1 ha finalizado");
  49. }
  50.  
  51. private static void TareaEscribirDatos2()
  52. {
  53. Console.WriteLine ("Segunda tarea de escribir datos iniciada.");
  54. BaseDeDatos.EscribirDatos ("xCSw");
  55. Console.WriteLine ("La tarea no. 2 ha finalizado");
  56. }
  57. }
  58. }
Success #stdin #stdout 0.03s 36960KB
stdin
Standard input is empty
stdout
Primera tarea de escribir datos iniciada.

Segunda tarea de escribir datos iniciada.
La ejecución de `EscribirDatos` ha iniciado.
`EscribirDatos` en ejecución...
Blog
Blog
Blog
Blog
Blog
Blog
Blog
Blog
Blog
Blog

`EscribirDatos` ha terminado.
La tarea no. 1 ha finalizado
La ejecución de `EscribirDatos` ha iniciado.
`EscribirDatos` en ejecución...
xCSw
xCSw
xCSw
xCSw
xCSw
xCSw
xCSw
xCSw
xCSw
xCSw

`EscribirDatos` ha terminado.
La tarea no. 2 ha finalizado