ロックフリーのアプリケーションを書く方法を探していますIPC Linux、C、マルチコアプロセッサ)。
FIFOまたは共有メモリに書き込むプロセス1およびプロセス2があるとします。次に、プロセス3およびプロセス4がその共有メモリまたはFIFOから読み取ります。
これはロックフリーアルゴリズムで可能ですか?
ご指導をよろしくお願いいたします。
私は、リングバッファーの使用への言及を見て、ロックの必要性を排除または削減するためにロケーションポインターへのアクセスを制御しました。ただし、待機の必要性がなくなるわけではなく、機能するのは、リングバッファーに1つのライターと1つのリーダーがある場合のみです。あなたのケースでは、少なくとも2つのバッファが必要になります。
私が理解しているメカニズムは次のとおりです。
ライターは最後のエントリポインタを更新します。
リーダーは、リングバッファーに使用可能なエントリがあるまで待機します(最後の!=現在)。
使用される待機時間に応じて、これは空のキュー内の新しいアイテムのレイテンシを追加するか、待機ループで多くのCPUサイクルを消費する可能性があります。これを機能させるには、ポインタの更新順序と書き込みアクセスの厳密な分離が重要です。ライターは、ポインターをインクリメントしてリーダーで使用できるようにする前に、リングバッファーエントリの書き込みのみを許可されます。
はい、可能です。プロジェクトでは、ロックフリーキューのアルゴリズムの1つを使用します。しかし、これらのアルゴリズムは本当に明白ではありません。それらを深く理解したい場合は、数か月を費やす準備ができているはずです。
Inter process通信をロックフリーにすることはできません。インタースレッドのみ。私の知る限りでは。