2017-05-31 9 views
2

私は次の問題のための最善の方法を尋ねました: 私はプロデューサとコンシューマという2つの異なるプロセスを持っています。 プロデューサはアイテムを生成します。各アイテムは符号なしのintです。消費者はそれらを消費するが、通常の消費者生産者の問題とは異なり、消費者は商品生産の正確な時間を知る必要がある。 消費者はプロデューサを信頼することができないので、プロデューサはアイテムと一緒に時間を提供すべきではありません。消費者はアイテムを消費する瞬間に現在の時間にシステムに尋ねる必要があります。 プロデューサーはリアルタイムアプリケーションであるため、これはすべて、プロデューサーに対する可能な影響を少なくして実行する必要があります。Unixユーザ空間のリアルタイムIPC

私はUnixのIPCメカニズムについて読んでみましたが、私はそれらの制約を満たすことができないものを見つけませんでした。 コンシューマとプロデューサはC++で書かれています。

任意のアイデアは、事前に おかげ

+0

私はあなたが、生産されるアイテムと消費されるアイテムとの間の時間をできるだけ小さくしたいと思いますか?したがって、消費者自身もリアルタイムアプリケーションでなければなりません。さもなければ、あなたの余暇で、消費者からのものを消費することができ、通常の優先順位のプロセスで、カーネルにプロセスを足元に持たせないようにすることができます。 –

答えて

0
  1. は、生産者と消費者の間で共有メモリを使用し、歓迎されるであろう。
  2. 遅延を最小限に抑えるために消費者側のイベントをポーリングします。
  3. コンシューマスレッドをCPUにピン止めして、コンテキスト切り替え(CPUアフィニティ)を防止します。
  4. タイマー・スタンプ・カウンター(TSC)を使用すると、長い「get time」システム・コールを回避できます。

これにより、最も正確な結果が得られます。

確かに、他の要件を満たしていれば、上記の項目の一部を犠牲にして、コンシューマアプリケーションのCPU効率を高めたり複雑にすることはできません。

+0

ありがとう、私はタイマースタンプカウンターについては知らなかった、私はそれを見ていきます。消費者が次のコンテキストスイッチを待つ必要があるため、まだ十分ではありません。 –

+0

@TomerGolombどういう意味ですか?コンシューマは、コンテキストスイッチを回避するためにイベントをポーリングする必要があります(#2) –

関連する問題