9

インターロックされたクラスについて学びましたが、単にロックするよりも高速であると考えられています。さて、これはすべて素晴らしいことですが、実装については興味があります。

私の知る限り、変数の操作がアトミックに行われるようにする唯一の方法は、常に 1 つのスレッドだけがその変数にアクセスできるようにすることです。これはロックしています。

リフレクターを使用して Interlocked のソースを取得しましたが、外部メソッドを使用してすべての作業を行っているようです:

[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal static extern int ExchangeAdd(ref int location1, int value);

私はいくつかのテストを実行しましたが、実際には Interlocked は、単にオブジェクトをロックしてインクリメントするよりも 2 倍高速です。

彼らはどのようにやっていますか?

4

1 に答える 1