Когда использовать блокировку против 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
ключевое слово, которое я понимаю его использование.