問題タブ [boost-interprocess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
249 参照

c++ - VS 2010 で boost::interprocess を使用するコードのビルドの問題

VS 2010 で、共有メモリにマップを持つ例としてオンラインでよく見られるコードを作成しようとしています。

このエラーが発生し、頭がおかしくなりました。何か案は?

0 投票する
1 に答える
10032 参照

c++ - Boostによるプロセス間リーダー/ライターロック

Boostを使用してリーダー/ライターロックを実装する方法を説明する場合、このスレッドはゴールドです。それは比較的単純なようで、私はそれが本当に好きですが、名前のないロックを使用しているようで、プロセス間ソリューションが必要です(ポータブルである必要はなく、Windowsのみである可能性があります)。

プロセス間通信を行う方法はありshared_mutexますか?あるのはわかりますが、他のロックnamed_mutexでは機能しません。shared_lock

どんなポインタでも大歓迎です。

[編集]

その間に、頭の爪にぶつかりそうなこの糸に出くわしました。私には2つの問題があります:

  1. 完全なコードは表示されません(使用する必要があると思いますnamed_upgradable_mutexが、よくわかりません)。
  2. デストラクタでロック解除を行う既成のクラスを使用せず、ミューテックスで3つのraw呼び出しのシーケンスを使用する、変更された「ライター」の答えは好きではありません。

コメントや良い解決策はまだ大歓迎です。

0 投票する
3 に答える
1222 参照

c++ - 共有メモリ内のSTLコンテナ(Windows)

私は、いくつかのデータ構造を共有する必要がある2つのプロセスで構成されるアプリケーションに取り組んでいます。これらのクラスはさまざまなライブラリで編成されており、ライブラリはさまざまなアプリケーションで使用されます。

  • 私の最初の試みはWin32で名前付き共有メモリを使用することでしたが、ここでの問題は、STLコンテナを使用できないことです。
  • 解決策を探していると、 Boost Interprocessを見つけました。理解している場合は、クラス内のすべてのSTLコンテナーを「STL」BoostInterprocessコンテナーに変更する必要があります。

それで、STL(Windowsの場合)を使用してクラスまたは構造を共有する他の方法はありますか?目標は、ライブラリでBoostからの依存度が高くなりすぎないようにすることです。

ありがとう

0 投票する
1 に答える
769 参照

c++ - Boost 共有メモリに関する質問

共有メモリを使用するためのシンプルだが移植可能な方法を考えています。Boost::interprocess開始するのに適した場所のように思えましたが、いくつかの問題/懸念に遭遇しました。

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

c++ - boost::interprocess 共有メモリ ロックを保持している場合のコア ダンプの処理

複数のマルチスレッド プロセスが、boost::interprocess (named_mutex の scoped_lock) を介して管理される共有メモリ ファイルのロックを取得しようとしているアプリケーションに取り組んでいます。

これらのプロセスの 1 つが共有メモリ ファイルのロックを保持している間にコアをダンプすると、他のすべてのプロセスはこのロックが解放されるのを待つことになるようです。

これをどのように克服できるかについてのアイデアはありますか? ロックを保持しているプロセスが終了したときに、ロックが確実に解放されるようにしたいと考えています。

問題の 1 つは、named_mutex オブジェクトのデストラクタを呼び出していないことです。これがこの問題の原因でしょうか? プロセスのコアダンプ時にデストラクタが呼び出されることが保証されていますか?

ありがとう!

0 投票する
1 に答える
438 参照

c++ - boost::interprocess::managed_shared_memory::construct を使用してアプリをコンパイルしようとするとエラーが発生する

クラスconstruct<T>()のメソッドを使用しようとすると、奇妙なコンパイル エラーが発生します。boost::interprocess::managed_shared_memoryBoost ライブラリを 1.48 バージョンで、GCC を 4.6.3 バージョンで使用しています。

問題は、managed_shared_memory object(構造体のメンバーではない) を作成し、そのメソッドを使用してオブジェクトを構築しようとするとconstruct<T>()、コンパイルが成功することです。

ただし、managed_shared_memoryオブジェクトが構造体内で定義されてから作成されると、メソッドの使用法のコンパイルはconstruct<T>()失敗します:

construct次の GCC エラーで、使用方法の行を指しています。

残念ながら、Boost と GCC の別のバージョンに対してはテストしていないので、Boost/GCC のバグなのか機能なのかはわかりません。

誰かが同様のエラーに苦労したり、何が原因であるかを知っていますか?

0 投票する
5 に答える
4809 参照

c++ - ポリモーフィッククラスを共有メモリに保存することは可能ですか?

私がクラスBaseとを持っているとしましょうDerived : public Base。boost::interprocessライブラリを使用して共有メモリセグメントを構築しました。これに似たコードを持つことは可能ですか?

ここで私が見ている問題は、たとえば、Baseの派生クラスに必要なスペースが不明であるということです(つまり、どのくらいのshmemを割り当てるのですか?)

Q:アプリケーション間でポインタを介してオブジェクトを渡す方法は?

0 投票する
3 に答える
10378 参照

c++ - 文字列の共有メモリ ベクトルを作成する

(std) 文字列の共有メモリ ベクトルを管理するクラスを作成しようとしています。

クライアントは文字列をベクターに正常に追加し (デバッグのためにバッファーからその文字列を読み取ることにも成功します)、マネージャー (上記のコード) はシグナル (条件変数) を受信し、ベクターに文字列があることを書き込みます (27 行目)、しかしat()、アプリケーションを介してその文字列を取得しようとするとクラッシュします。


編集:私は、の使用std::stringが不可能であることを理解しましたstring。この場合のためだけに、boost ipc にコンテナーがあります。これは、(boost/std) 文字列のベクトルが必要であるという事実を変更しません...


Q :共有メモリ間で文字列を渡すにはどうすればよいですか? それらをshmemのバッファ(一度に1つ以上格納できる)に格納し、2番目のプロセスでフェッチする必要があります-それが要件です。入力と出力は常にstd::string同じですが、shmem の内部表現は異なる場合があります。

0 投票する
1 に答える
308 参照

c++ - ブーストのさまざまなバージョン間での boost::interprocess::managed_shared_memory の互換性

boost::interprocess::managed_shared_memory が異なるブースト バージョン間で機能するという明示的な互換性保証はありますか? 私はそれを使用して、複数のプロセス間で整数または 10 を共有することを計画しています (これは基本的に、それらがすべて読み取り、一部が書き込むデータのリビジョン番号として機能します)。プロセスは個別にリリースされ、時々サポートが終了します。

問題は、1.51 の managed_shared_memory が 1.44 の managed_shared_memory と通信できないなどの理由で、特定のバージョンのブーストに永遠にロックダウンしているのでしょうか?

0 投票する
3 に答える
3537 参照

c++ - boost::interprocess::file_lock でロックされたファイルを作成する

プロセスによってboost::interprocess::file_lockディレクトリに書き込まれたファイルが完了するまでプロセスによって読み取られないようにするために使用したいと思います。これを行うには、書き込み中にファイルをロックし、完了したらロックを解除したいと思います。次に、ロックされているファイルをスキップする (そして戻ってくる) ことができます。xP1P2P1boost::interprocess::file_lockP2

私が抱えている問題はboost::interprocess::file_lock、存在するファイルのみをロックできるように見えることです。しかし、最初にファイルを作成してからロックすると、競合状態が発生します。

  1. P1ファイルを作成します
  2. P2ファイルに気づき、読み取りを開始します
  3. P1ファイルをロックします
  4. P1いくつかのデータを書き込みます
  5. P2P1いくつかのデータを読み取り、最後に到達し、の出力の一部のみで終了します。

だから私がやりたいのは、ファイルを作成し、作成したらすぐにロックすることです。を使用してこれを行う方法はありboost::interprocess::file_lockますか?