データを共有する2つのプロセスを同期する方法を模索しています。
基本的に、共有メモリを使用してリンクされた2つのプロセスがあります。プロセスAで共有メモリ領域にデータを設定し、プロセスBでそのデータを読み取って処理する必要があります。
私が探している一連のイベントは次のとおりです。
- データ利用可能信号を待機しているBブロック
- Aはデータを書き込みます
- 利用可能な信号データ
- Bはデータを読み取ります
- データが利用できない信号を待機しているBブロック
- 信号データは利用できません
- すべてが最初に戻ります。
言い換えると、Bは「1」信号を取得するまでブロックし、データを取得してから、その信号が「0」になるまで再度ブロックします。
純粋な共有メモリを使用して正常にエミュレートできましたが、CPU時間を100%消費するwhileループを使用してブロックするか、一部の信号を見逃すことがあるnanosleepを含むwhileループを使用します。
セマフォを使用してみましたが、1ではなく0を待つ方法しか見つかりませんでした。また、2つのセマフォを使用しようとしてもうまくいきませんでした。セマフォが進むべき道ではないと思います。
すべて同じ共有メモリ領域にアクセスする多数のプロセスがあり、その共有メモリが変更されたときにすべてのプロセスに通知する必要があります。
基本的に、ハードウェアデータと制御バスをエミュレートしようとしています。イベントはレベルトリガーではなくエッジです。それは、州自体ではなく、私が興味を持っている州間の移行です。
それで、何かアイデアや考えはありますか?