アプリケーションがWindowsVista以降を対象としている場合、すべてのクリティカルセクションをSRWロックに置き換えることができますか?クリティカルセクションは相互に排他的であるため、使用法では、排他モードのSRWロックと同等です。MSDNによると、SRWは速度とスペースの両方で最適化されています。これを行うことの欠点はありますか?CSとSRWがMicrosoftによって内部的にどのように実装されているかはわかりません。
ありがとう!
アプリケーションがWindowsVista以降を対象としている場合、すべてのクリティカルセクションをSRWロックに置き換えることができますか?クリティカルセクションは相互に排他的であるため、使用法では、排他モードのSRWロックと同等です。MSDNによると、SRWは速度とスペースの両方で最適化されています。これを行うことの欠点はありますか?CSとSRWがMicrosoftによって内部的にどのように実装されているかはわかりません。
ありがとう!
JoeDuffyの著書「ConcurrentProgrammingonWindows」、289ページを参照してください。
あなたの質問に対する簡単な答えは「ほぼ」です。SRWLとは異なる、再帰的に取得されたCRITICAL_SECTIONのセマンティクスがあります。プログラムがWin32のクリティカルセクションのこれらの特性を利用している場合、SRWLに簡単に切り替えることはできません。ただし、SRWLをラッパーでラップして、CSのようなセマンティクスを提供することもできますが、そうすることには微妙な点がたくさんあるため、そのような動作に依存している場合は、CSに固執することをお勧めします。
Kenny Kerrの記事では、両方が内部でどのように実装されているかについて少し説明しています。