Kiedy używać blokady vs MemoryBarrier w .NET

W .NET thelock Słowo kluczowe to cukier składniowyMonitor.Enter iMonitor.Exit, więc możesz powiedzieć, że ten kod

lock(locker)
{
  // Do something
}

jest taki sam jak

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

Jednak środowisko .NET zawiera takżeMemoryBarrier klasa, która działa w podobny sposób

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

Jestem zdezorientowany, kiedy chciałbym użyćThread.MemoryBarrier nadlock/Monitor wersja? Jestem jeszcze bardziej zdezorientowanysamouczek do wątków który stwierdza, że ​​działają tak samo.

O ile widzę, widoczna różnica nie wymaga obiektu blokującego, który, jak sądzę, wykorzystujeMonitor możesz coś zrobić w różnych wątkachMemoryBarrier jest na jednym wątku.

Moje przeczucie mówi mi, że inna kluczowa różnica toMemoryBarrier jest tylko dla zmiennych, a nie dla metod.

Wreszcie nie ma to związku z istniejącym pytaniemKiedy używać „volatile” lub „Thread.MemoryBarrier ()” w kodzie blokującym wątki? (DO#), jak to koncentruje się navolatile słowo kluczowe, które rozumiem jego użycie.

questionAnswers(1)

yourAnswerToTheQuestion