Cuándo usar lock vs MemoryBarrier en .NET
En .NET ellock
palabra clave es el azúcar sintáctica alrededorMonitor.Enter
yMonitor.Exit
, así se podría decir que este código
lock(locker)
{
// Do something
}
es lo mismo que
Monitor.Enter(locker);
try
{
// Do Something
}
finally
{
Monitor.Exit(locker);
}
Sin embargo, el framework .NET también incluye elMemoryBarrier
clase que funciona de manera similar
Thread.MemoryBarrier();
//Do something
Thread.MemoryBarrier();
Estoy confundido como cuando querría usarThread.MemoryBarrier
sobre ellock
/Monitor
¿versión? Me siento aún más confundido porun tutorial de subprocesos que dice que funcionan igual.
Por lo que puedo ver, la diferencia visible no es la necesidad de un objeto de bloqueo, que supongo que usarMonitor
usted podría hacer algo a través de hilos dondeMemoryBarrier
está en un solo hilo.
Mi instinto me dice que otra diferencia clave esMemoryBarrier
es solo para variables y no para métodos.
Por último esto no está relacionado con la pregunta existente.¿Cuándo usar ‘volatile’ o ‘Thread.MemoryBarrier ()’ en el código de bloqueo de threadsafe? (DO#), ya que se está enfocando en elvolatile
palabra clave que entiendo su uso de.