Advertisement
Fhernd

ModoUsuarioVsModoKernel.cs

Jul 16th, 2015
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.75 KB | None | 0 0
  1. // OrtizOL - xCSw - http://ortizol.blogspot.com
  2.  
  3. using System;
  4. using System.Threading;
  5.  
  6. namespace Receta.Multithreading.R0208
  7. {
  8.     public class ModoUsuarioVsModoKernel
  9.     {
  10.         static volatile bool finalizado = false;
  11.        
  12.         public static void Main()
  13.         {
  14.             Console.WriteLine(Environment.NewLine);
  15.            
  16.             Thread t1 = new Thread(ModoEsperaUsuario);
  17.             Thread t2 = new Thread(ModoEsperaKernel);
  18.  
  19.             Console.WriteLine("Modo espera de usuario en ejecución");
  20.             t1.Start();
  21.             Thread.Sleep(20);
  22.             finalizado = true;
  23.            
  24.             Thread.Sleep(TimeSpan.FromSeconds(2));
  25.            
  26.             finalizado = false;
  27.            
  28.             Console.WriteLine("Modo espera de kernel en ejecución");
  29.             t2.Start();
  30.             Thread.Sleep(5);
  31.             finalizado = true;
  32.            
  33.             Console.WriteLine(Environment.NewLine);
  34.         }
  35.        
  36.         // Método que simula la espera de usuario:
  37.         public static void ModoEsperaUsuario()
  38.         {
  39.             while (!finalizado)
  40.             {
  41.                 Console.Write(".");
  42.             }
  43.            
  44.             Console.WriteLine();
  45.             Console.WriteLine("La espera de usuario ha finalizado.");
  46.         }
  47.        
  48.         // Método que simula la espera de kernel con SpinWait:
  49.         public static void ModoEsperaKernel()
  50.         {
  51.             SpinWait sw = new SpinWait();
  52.            
  53.             while (!finalizado)
  54.             {
  55.                 sw.SpinOnce();
  56.                 Console.WriteLine(sw.NextSpinWillYield);
  57.             }
  58.            
  59.             Console.WriteLine("La espera de kernel ha finalizado.");
  60.         }
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement