.NET では、キーワードはandをlock
囲む構文糖衣であるため、このコードは次のように言えます。Monitor.Enter
Monitor.Exit
lock(locker)
{
// Do something
}
と同じです
Monitor.Enter(locker);
try
{
// Do Something
}
finally
{
Monitor.Exit(locker);
}
ただし、.NET フレームワークにはMemoryBarrier
、同様の方法で機能するクラスも含まれています。
Thread.MemoryBarrier();
//Do something
Thread.MemoryBarrier();
/バージョンでいつ使用Thread.MemoryBarrier
したいのか混乱していますか? 私は、それらが同じように機能すると述べている Threading Tutorialによってさらに混乱しています。lock
Monitor
私が見る限り、目に見える違いはロックオブジェクトを必要としないことです。これを使用すると、単一のスレッド上にあるMonitor
スレッド間で何かを行うことができると思います。MemoryBarrier
私の直感によると、もう 1 つの重要な違いはMemoryBarrier
変数のみであり、メソッドではありません。
最後に、これは既存の質問「いつスレッドセーフ ロック コードで 'volatile' または 'Thread.MemoryBarrier()' を使用するか?」とは関係ありません。(C#)volatile
、それは私がその使用法を理解しているキーワードに焦点を当てているためです。