Когда использовать блокировку против MemoryBarrier в .NET

В .NETlock Ключевое слово - синтаксический сахар вокругMonitor.Enter а такжеMonitor.Exit, так что вы могли бы сказать, что этот код

lock(locker)
{
  // Do something
}

такой же как

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

Однако .NET Framework также включает в себяMemoryBarrier класс, который работает аналогичным образом

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

Я запутался, как, когда я хотел бы использоватьThread.MemoryBarrier надlock/Monitor версия? Я смущенучебник потоков какие состояния они функционируют одинаково.

Насколько я вижу, видимая разница не нуждается в блокирующем объекте, который я предполагаю, что используяMonitor Вы могли бы сделать что-то через темы, гдеMemoryBarrier находится на одной нити.

Моя интуиция говорит мне, что еще одно ключевое отличиеMemoryBarrier только для переменных, а не для методов.

Наконец, это не связано с существующим вопросомКогда использовать «volatile» или «Thread.MemoryBarrier ()» в поточно-ориентированном коде блокировки? (С #), поскольку это сосредоточено наvolatile ключевое слово, которое я понимаю его использование.

Ответы на вопрос(1)

Ваш ответ на вопрос