Verwendung von lock vs MemoryBarrier in .NET
In .NET ist daslock
Stichwort ist syntaktischer ZuckerMonitor.Enter
undMonitor.Exit
, so könnte man sagen, dass dieser Code
lock(locker)
{
// Do something
}
ist das gleiche wie
Monitor.Enter(locker);
try
{
// Do Something
}
finally
{
Monitor.Exit(locker);
}
Das .NET Framework enthält jedoch auch dasMemoryBarrier
Klasse, die auf ähnliche Weise funktioniert
Thread.MemoryBarrier();
//Do something
Thread.MemoryBarrier();
Ich bin verwirrt, als wenn ich verwenden möchteThread.MemoryBarrier
über demlock
/Monitor
Ausführung? Ich bin noch verwirrter vonein Threading-Tutorial welche Zustände sie gleich funktionieren.
Soweit ich sehen kann, braucht der sichtbare Unterschied kein Sperrobjekt, was ich denke, dass mitMonitor
Sie könnten etwas über Threads tun, woMemoryBarrier
ist auf einem einzelnen Thread.
Mein Bauch sagt mir, dass ein weiterer wichtiger Unterschied istMemoryBarrier
ist nur für Variablen und nicht für Methoden.
Letztendlich hat dies nichts mit der bestehenden Frage zu tunWann wird "volatile" oder "Thread.MemoryBarrier ()" im thread-sicheren Sperrcode verwendet? (C #), da sich das auf das fokussiertvolatile
Stichwort, dessen Verwendung ich verstehe.