Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created July 16, 2015 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fhernd/d3316331300b6c5c9629 to your computer and use it in GitHub Desktop.
Save Fhernd/d3316331300b6c5c9629 to your computer and use it in GitHub Desktop.
Demostración del uso de `SpinWait` en C#.
// OrtizOL - xCSw - http://ortizol.blogspot.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.");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment