2011-07-29 18 views
0

C++プロジェクトでObserver Patternを実装しました。マルチスレッド環境で共有メモリを同期

  1. Subjectはタグを読み取り、その値を公開するXMLファイルリーダーです。
  2. 私はオブザーバーである「処理オブジェクト」をいくつか持っています。彼らは現在読み込まれているタグをチェックします。タグに従属していれば、それを処理します。他のタグは無視します。
  3. 私は、タグとその値がダンプされるメモリバンクを持っています。

私の問題はありません。どのようにメモリ操作を同期させるのですか? 私のXMLリーダーはタグ/値を公開したいとき、未使用のメモリブロックを取得し、それを "ロック"して編集不可能にする必要があります。すべての「処理オブジェクト」がメモリで完了すると、後で使用するために「ロック解除」できる必要があります。

どうすればこの問題を解決できますか?助けてください。

答えて

4

あなたはboost shared memoryをチェックアウトしましたか?それは様々なsynchronization mechanismsと例を持っています...

プロセス間ライブラリで説明されている同期メカニズムは、共有メモリブロック自体にミューテックスを入れたい場合に特に便利です。

1

あなたの主な仕事は、同期メカニズムを学ぶ/開発することではないと仮定します。

既存のコンポーネントを再利用する必要があります。多くのコンポーネントがあります。これは非常に良いですhttp://www.rabbitmq.com/getstarted.html

これは、複数の(分散型/ネットワーク型の)モデルをサポートします。最初の学習期間があるかもしれませんが、一度統合すれば拡張機能に引き続き使用でき、代わりに問題の肉に集中できます。

+0

まあ私はRabitMQ、C#、Javaなどのためです。私はC++のためにそれが必要です。とにかく感謝しています.RabbitMQを使用できる別のプロジェクトがあるためです。 – Anand

+0

C++バインディングもあります https://github.com/akalend/amqpcpp http://www.rabbitmq.com/devtools.html#c-dev –

関連する問題