fork download
  1. using System;
  2. using System.Collections;
  3. using System.Threading;
  4.  
  5. namespace Recetas.CSharp.R0414
  6. {
  7. public sealed class lockColecciones
  8. {
  9. // Instancia `Object` para el bloqueo concurrente:
  10. private static Object objBloqueante = new Object();
  11.  
  12. // Lista contenedora de cadenas:
  13. private static ArrayList listaCadenas = new ArrayList();
  14.  
  15. // Contador acceso lista:
  16. private static int contadorAcceso = 0;
  17.  
  18. public static void Main()
  19. {
  20. Console.Title = "Demostración Acceso Concurrente en Colecciones";
  21. Console.WriteLine ();
  22.  
  23. // Agregación de cadenas al objeto `listaCadenas`:
  24. listaCadenas.Add ("Experiencias");
  25. listaCadenas.Add ("Construcción");
  26. listaCadenas.Add ("Software");
  27. listaCadenas.Add ("xCSw");
  28.  
  29. // Crea 10 instancias de `Thread` para acceder y leer el contenido del
  30. // objeto ArrayList:
  31. for (int i = 1; i <= 10; ++i)
  32. {
  33. Thread t = new Thread( AccederLista );
  34. t.Name = String.Format ("Thread-{0}", i.ToString());
  35. t.Start();
  36. }
  37. }
  38.  
  39. public static void AccederLista()
  40. {
  41. lock (objBloqueante)
  42. {
  43. Console.WriteLine ("El thread `{0}` accedió al elemento `{1}`.",
  44. Thread.CurrentThread.Name,
  45. listaCadenas[contadorAcceso%4]
  46. );
  47.  
  48. Thread.Sleep (1000);
  49.  
  50. ++contadorAcceso;
  51. }
  52. }
  53. }
  54. }
Success #stdin #stdout 0.03s 44232KB
stdin
Standard input is empty
stdout
El thread `Thread-1` accedió al elemento `Experiencias`.
El thread `Thread-9` accedió al elemento `Construcción`.
El thread `Thread-5` accedió al elemento `Software`.
El thread `Thread-2` accedió al elemento `xCSw`.
El thread `Thread-4` accedió al elemento `Experiencias`.
El thread `Thread-6` accedió al elemento `Construcción`.
El thread `Thread-7` accedió al elemento `Software`.
El thread `Thread-3` accedió al elemento `xCSw`.
El thread `Thread-10` accedió al elemento `Experiencias`.
El thread `Thread-8` accedió al elemento `Construcción`.