// OrtizOL - xCSw - http://o...content-available-to-author-only...t.com using System; using System.Threading; namespace Receta.Multithreading.R0208 { public class ModoUsuarioVsModoKernel { static volatile bool finalizado = false; public static void Main() { Console.WriteLine(Environment.NewLine); Thread t1 = new Thread(ModoEsperaUsuario); Thread t2 = new Thread(ModoEsperaKernel); Console.WriteLine("Modo espera de usuario en ejecución"); t1.Start(); Thread.Sleep(20); finalizado = true; Thread.Sleep(TimeSpan.FromSeconds(2)); finalizado = false; Console.WriteLine("Modo espera de kernel en ejecución"); t2.Start(); Thread.Sleep(5); finalizado = true; Console.WriteLine(Environment.NewLine); } // Método que simula la espera de usuario: public static void ModoEsperaUsuario() { while (!finalizado) { Console.Write("."); } Console.WriteLine(); Console.WriteLine("La espera de usuario ha finalizado."); } // Método que simula la espera de kernel con SpinWait: public static void ModoEsperaKernel() { SpinWait sw = new SpinWait(); while (!finalizado) { sw.SpinOnce(); Console.WriteLine(sw.NextSpinWillYield); } Console.WriteLine("La espera de kernel ha finalizado."); } } }