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.