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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta