共有メモリを使用するためのシンプルだが移植可能な方法を考えています。Boost::interprocess
開始するのに適した場所のように思えましたが、いくつかの問題/懸念に遭遇しました。
- できればブースト API を使用して、何らかの方法で shm セグメントの存在を照会できますか? 私はいつでもそれを作成して
create_only
例外をキャッチしようとすることができましたが、それは悪い設計です.「良い」パスでスタックを巻き戻したくありません. - 他のプロセスがアタッチされている場合でも、セグメントを切り捨てることはできますか? (もちろん、同期を処理する場合)他のすべてのプロセスを再マップする必要があると思いますが、それらも再接続する必要がありますか?
- Boost docによると、Windowsでは、ポータブル
shared_memory_object
は実際には共有メモリ自体ではなく、メモリマップファイルです。私はそれを正しく理解しましたか?これは、回避しようとしていたウィンドウで特殊なコードを使用する必要があることを意味します。私の目的に対するBoostの適合性に疑問を抱かせます。代替手段はありますか? ブーストと戦う代わりに、プラットフォーム固有のコードを自分で作成することもできます - あなたの意見では、それは努力する価値があるでしょうか?