Quando usar o bloqueio vs MemoryBarrier no .net

No .NET, olock palavra-chave é açúcar sintático em tornoMonitor.Enter eMonitor.Exit, então você poderia dizer que esse código

lock(locker)
{
  // Do something
}

é o mesmo que

Monitor.Enter(locker);
try
{
  // Do Something
}
finally
{
  Monitor.Exit(locker);
}

No entanto, o framework .NET também incluiMemoryBarrier classe que funciona de forma semelhante

Thread.MemoryBarrier();
//Do something
Thread.MemoryBarrier();

Estou confuso como quando gostaria de usarThread.MemoryBarrier sobre olock/Monitor versão? Fico ainda mais confuso comum tutorial de encadeamento que afirma que eles funcionam da mesma forma.

Tanto quanto eu posso ver a diferença visível não está precisando de um objeto de bloqueio, que eu acho que usandoMonitor você poderia fazer algo através de segmentos ondeMemoryBarrier está em um único segmento.

Meu intestino está me dizendo que outra diferença fundamental éMemoryBarrier é apenas para variáveis ​​e não para métodos.

Por fim, isso não está relacionado à pergunta existenteQuando usar "volátil" ou "Thread.MemoryBarrier ()" no código de bloqueio thread-safe? (C #), como isso está se concentrando novolatile palavra-chave que eu entendo o seu uso de.

questionAnswers(1)

yourAnswerToTheQuestion