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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage