12

.NET では、キーワードはandをlock囲む構文糖衣であるため、このコードは次のように言えます。Monitor.EnterMonitor.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によってさらに混乱しています。lockMonitor

私が見る限り、目に見える違いはロックオブジェクトを必要としないことです。これを使用すると、単一のスレッド上にあるMonitorスレッド間で何かを行うことができると思います。MemoryBarrier

私の直感によると、もう 1 つの重要な違いはMemoryBarrier変数のみであり、メソッドではありません。

最後に、これは既存の質問「いつスレッドセーフ ロック コードで 'volatile' または 'Thread.MemoryBarrier()' を使用するか?」とは関係ありません。(C#)volatile 、それは私がその使用法を理解しているキーワードに焦点を当てているためです。

4

1 に答える 1