fork download
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4.  
  5. namespace Recetas.Multithreading.Cap01.R0106
  6. {
  7. public class ManejadorThread
  8. {
  9. private bool detenido = false;
  10.  
  11. public void Detener()
  12. {
  13. detenido = true;
  14. }
  15.  
  16. public void ContarNumeros()
  17. {
  18. long contador = 0;
  19.  
  20. while (!detenido)
  21. {
  22. ++contador;
  23. }
  24.  
  25. Console.WriteLine ("\nEl thread `{0}` con prioridad {1,11} tiene un contador de {2,13}.",
  26. Thread.CurrentThread.Name,
  27. Thread.CurrentThread.Priority.ToString(),
  28. contador.ToString ("N0")
  29. );
  30. }
  31. }
  32.  
  33. public sealed class EjecucionThreadEnCore
  34. {
  35. public static void EjecutarThreads ()
  36. {
  37. ManejadorThread mt = new ManejadorThread();
  38.  
  39. // Crea dos instancias de Thread y les
  40. // asigna un nombre identificativo:
  41. Thread t1 = new Thread (mt.ContarNumeros);
  42. t1.Name = "Thread no. 1";
  43. Thread t2 = new Thread (mt.ContarNumeros);
  44. t2.Name = "Thread no. 2";
  45.  
  46. // Establece el nivel de prioridad:
  47. t1.Priority = ThreadPriority.Highest;
  48. t2.Priority = ThreadPriority.Lowest;
  49.  
  50. // Inicio de la ejecución de los threads:
  51. t1.Start ();
  52. t2.Start ();
  53.  
  54. // Detiene el Thread actual por 2 segundos:
  55. Thread.Sleep (TimeSpan.FromSeconds (2));
  56. mt.Detener();
  57. }
  58.  
  59. public static void Main()
  60. {
  61. Console.WriteLine ("\nPrioridad del thread Main: {0}",
  62. Thread.CurrentThread.Priority
  63. );
  64.  
  65. Console.WriteLine ("Ejecución sobre todos los núcleos (cores) disponibles...");
  66. EjecutarThreads();
  67.  
  68. // Detiene al thread Main por 2 segundos:
  69. Thread.Sleep (TimeSpan.FromSeconds (3));
  70. Console.WriteLine ("\nEjecución sobre un único núcleo (core)...");
  71. Process.GetCurrentProcess().ProcessorAffinity = new IntPtr (1);
  72. EjecutarThreads();
  73. }
  74. }
  75. }
Success #stdin #stdout 4.06s 36104KB
stdin
Standard input is empty
stdout
Prioridad del thread Main: Lowest
Ejecución sobre todos los núcleos (cores) disponibles...

El thread `Thread no. 2` con prioridad      Lowest tiene un contador de   321,775,972.

El thread `Thread no. 1` con prioridad      Lowest tiene un contador de   320,151,802.

Ejecución sobre un único núcleo (core)...

El thread `Thread no. 2` con prioridad      Lowest tiene un contador de   361,832,494.

El thread `Thread no. 1` con prioridad      Lowest tiene un contador de   362,133,794.