0

共有メモリを介してさまざまなアプリケーションに内部状態を共有しているデーモンがあるとします。プロセスは、名前付きパイプで IPC メッセージをデーモンに送信して、さまざまな操作を実行できます。このシナリオでは、一種の「リモート プロキシ」として機能するクライアント用の C++ ラッパー クラスを作成して、クライアントからいくつかの厄介な詳細 (同期、メッセージ パッシングなど) を隠し、コードの分離を容易にしたいと考えています。単体テスト。

3 つの質問があります。

  • 一般的に、これは良いアイデア/アプローチですか?
  • このセットアップでの同期に関するヒントや落とし穴はありますか?それとも、標準のリーダー/ライター ミューテックス セットアップを使用するだけで十分ですか?
  • 考慮すべきフレームワークはありますか?

問題のターゲットは、2.18 カーネルを搭載した組み込み Linux システムであるため、メモリとコンパイラの機能に制限があります。

4

2 に答える 2

2

Herb Sutter の記事「共有はすべての争いの根源である」という記事がありましたが、これには私もおおむね同意しています。共有メモリ アーキテクチャを使用している場合は、かなりの潜在的なスレッドの問題にさらされています。

クライアント/サーバー モデルでは、クライアントが名前付きサーバー パイプに書き込み、サーバーが一意のクライアント パイプに書き戻す (またはソケットを使用する) ことで、物事を大幅に単純化できます。また、単体テストが簡単になり(共有メモリのテストについて心配する必要がないため)、ミューテックスなどを回避できます。

于 2009-05-26T20:36:26.577 に答える
1

Boost.Interprocessライブラリがありますが、組み込みシステムへの適合性についてはコメントできません。

于 2009-05-26T19:42:15.233 に答える