私はこれについて特に密集していますが、私がやりたいことは共通でなければならないので、重要で基本的なポイントか何かが欠けているようです:
マネージャー プロセス ( ) から固定サイズのリング バッファー オブジェクトを作成する必要がありますProcess M
。このオブジェクトには、バッファから読み書きするメソッドがwrite()
あります。read()
読み取り/書き込みメソッドは、独立したプロセス (Process R
およびW
)によって呼び出されます。
バッファを実装しました。これはSharedBuffer<T&>
、boost::interprocess を使用して SHM にバッファ スロットを割り当て、単一のプロセス内で完全に動作します。SO でこの質問とその質問への回答を読み、自分自身に尋ねましたが、異なるプロセスが共通のオブジェクトからメソッドにアクセスする方法についてはまだわかりません。Boost doc には、 SHM でベクトルを作成する例があり、これは私が望むものと非常に似ていますが、独自のクラスをインスタンス化したいと考えています。
私の現在のオプションは次のとおりです。
new
Charles B. が私の質問に提案したように、配置を使用してください。ただし、彼は、POD 以外のオブジェクトを SHM に入れるのは得策ではないと警告しています。しかし、私のクラスには読み取り/書き込みメソッドが必要です。どうすればそれらを処理できますか?- クラス定義にアロケータを追加します。たとえば、ブーストで指定されたベクトルの例
SharedBuffer<T&, Alloc>
と同様に進めます。これは本当に複雑に聞こえます。 - POD クラスに変更
SharedBuffer
します。つまり、すべてのメソッドを取り除きます。しかし、プロセス間で読み取りと書き込みを同期するにはどうすればよいでしょうか。
私は何が欠けていますか?固定長のリング バッファは非常に一般的であるため、この問題には解決策があるか、何か間違ったことをしている可能性があります。