2つのWindowsプロセスには、同じ共有ファイルがメモリマップされています。ファイルがカウンターで構成されている場合、Interlocked*
関数(などInterlockedIncrement
)を使用してそれらのカウンターを更新するのは適切ですか?それらはプロセス間でアクセスを同期しますか?または、ミューテックスなど、より重いものを使用する必要がありますか?あるいは、共有メモリメカニズム自体が一貫したビューを保証するかもしれません。
2653 次
2 に答える
7
インターロックされた機能は、まさにそのタイプの使用を目的としています。
http://msdn.microsoft.com/en-us/library/ms684122.aspxから:
変数が共有メモリにある場合、さまざまなプロセスのスレッドがこれらの関数を使用できます。
もちろん、複数のアイテムをアトミックに更新する必要がある場合は、プロセス間で機能するミューテックスまたはその他の同期オブジェクトを使用する必要があります。共有メモリにアクセスするための同期を提供するための共有メモリメカニズムには何も組み込まれていません。インターロックされた関数または同期オブジェクトを使用する必要があります。
于 2009-10-28T14:46:05.577 に答える
3
MSDNから:
..。
インターロックされたAPI
インターロックされた関数は、複数のスレッドによって共有される変数へのアクセスを同期するための単純なメカニズムを提供します。また、アトミックな方法で変数の操作を実行します。変数が共有メモリにある場合、さまざまなプロセスのスレッドがこれらの関数を使用できます。
したがって、はい、共有メモリアプローチで安全です。
于 2009-10-28T14:56:06.540 に答える