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.