同じCPUで実行されている複数のスレッドのコンテキストで使用するCAS関数が必要です(すべてのスレッドがを介して選択したCPUに静的に接着されていると仮定しますSetThreadAffinityMask
)。
InterlockedCompareExchange
LOCKCMPXCHGを生成します。LOCK部分には、キャッシュミス、バスロック、他のCPUとの競合の可能性などの副作用があります。これらはすべて素晴らしいですが、状況を考えると贅沢な過剰のように感じます。競合するスレッドは同じCPUで実行されるため、LOCKを削除できると思います。さらに、パフォーマンスが向上するはずだと思います。
だからこれが私の最初の質問です-私は正しく仮定していますか?
-
32ビットバージョンのインラインアセンブリでCMPXCHGを生成する方法を知っています。また、このSOスレッドによると、64ビットバージョンでも実行方法を知っていますが、関数呼び出しとしてです。
私が理解していないこと、そしてこれが私の2番目の質問ですが、それのインラインバージョンを生成する方法です。
-
ありがとう。