プロセス間の通信が共有メモリを使用して行われるプロジェクトを見たことがあります (たとえば::CreateFileMapping
、Windows で使用)。プロセスの 1 つが共有メモリでデータが利用可能であることを通知するたびに、名前付きイベントを使用した同期メカニズムが関係者に通知されます。共有メモリの内容が変更されたこと。
新しい情報を読み取るプロセスが、データのコピーを無効にし、プロデューサー プロセスによって「公開」されたらメイン メモリから読み取る必要があることを知るために、適切なメモリ フェンスが存在しないという事実が懸念されます。 .
Windows で共有メモリを使用してこれを行う方法を知っていますか?
EDIT ファイルマッピングを作成した後、プロセスはMapViewOfFile() APIを1回だけ使用し、共有データへの新しい変更はすべて、MapViewOfFile()への最初の呼び出しによって取得されたポインターを使用して、共有メモリを介して送信された新しいデータを読み取ることを追加したかっただけです. 正しい同期では、共有メモリ内のデータが変更されるたびに、データを読み取るプロセスで毎回 MapViewOfFile() を作成する必要がありますか?