ページ 11

共有メモリ

Posted: 2013年1月28日(月) 01:46
by ビギナー
現在共有メモリを取り扱うプログラムを組んでいます。
プロセスAが共有メモリにデータを書き込みプロセスBがそのデータを使うという
ようなプログラムです。

共有メモリにはCreateFileMapping を使用しています。
仮にプロセスAが落ちてしまった場合、書き込んだいたメモリが消去されるという
考えに至ったのですが(実際にそんな感じになっていました)

プロセスAが落ちてもデータは残っているようにしたいのですが
何かよい方法はありませんでしょうか?

Re: 共有メモリ

Posted: 2013年1月28日(月) 11:22
by softya(ソフト屋)
無くならないはずなんですが、消えますでしょうか?
検証コードを見せて頂けると、こちらでも検証出来ますのでお願いします。

CreateFileMapping の仕様では、全部のハンドルが閉じるまで保持されると書かれています。
「CreateFileMapping 関数」
http://msdn.microsoft.com/ja-jp/library/cc430039.aspx

Re: 共有メモリ

Posted: 2013年1月28日(月) 17:19
by YuO
読み込み用のハンドルを開くより前に落ちた場合は,まあデータは失われますが……。
これを避けるならば,ファイル等の不揮発性ストレージに書き出すしかないでしょう。
# 書き込み中のデータにどれだけの意味があるのかわかりませんが。

結局は,どのタイミングでプロセスが落ちたのかによって,状況が変わります。
どういうタイミングで落ちたのでしょうか (読み側と書く側のファイルマッピングオブジェクトのハンドルを得るタイミングと,プロセスが落ちるタイミング)。

あと,ファイルマッピングによる共有メモリがデータを渡すための手段であるならば,WM_COPYDATAやパイプなどの方法で直接プロセス間通信をしてみるのもよいかもしれません。