Interlocked *関数は共有メモリで役立ちますか?
-
08-07-2019 - |
質問
2つのWindowsプロセスには、同じ共有ファイルにマップされたメモリがあります。ファイルがカウンターで構成されている場合、 Interlocked *
関数( InterlockedIncrement
など)を使用してこれらのカウンターを更新するのは適切ですか?これらはプロセス間でアクセスを同期しますか?または、ミューテックスのようなより重いものを使用する必要がありますか?または、おそらく共有メモリメカニズム自体が一貫したビューを保証します。
解決
MSDN から:
...
インターロックAPI
インターロックされた関数は、 同期のためのシンプルなメカニズム 共有されている変数へのアクセス 複数のスレッド。彼らも実行します アトミックの変数の操作 マナー。異なるスレッド プロセスはこれらの関数を使用できます 変数は共有メモリにあります。
それで、はい、共有メモリのアプローチで安全です。
他のヒント
インターロックされた関数は、まさにそのタイプの使用を目的としています。
http://msdn.microsoft.com/en-us/からlibrary / ms684122.aspx :
変数が共有メモリにある場合、異なるプロセスのスレッドはこれらの関数を使用できます。
もちろん、複数のアイテムをアトミックに更新する必要がある場合、プロセス間で機能するmutexまたはその他の同期オブジェクトを使用する必要があります。共有メモリにアクセスするための同期を提供するために、共有メモリメカニズムには何も組み込まれていません。インターロックされた関数または同期オブジェクトを使用する必要があります。
所属していません StackOverflow