私は次のことをしたい:
私は何台かのコンピュータを持っています。各コンピューターでプログラムが実行されます。集中サーバーはありません。
プログラムは、定義された基準によって選択して、別のコンピューターに指定されたデータを与えることができます。そうしている間、他のコンピューターは同じことをしてはいけません。(一種の双方向同期)
例を挙げましょう。(C1 .. Cn は、異なるコンピューターで実行されているプログラムです)
C1 は C2 に更新されたデータを送信します。処理がアクティブな間、C2 は C1 に何か他の更新を要求してはなりません。
アイデアは次のとおりです。
- C1 が C2 にメッセージを送信します: PauseExecution()
- C1 は、処理するアイテムを C2 に送信します (C2 の一部のデータを更新します)。
- C1 がメッセージを C2 に送信します: ResumeExecution()。
- C2 が C1 にメッセージを送信します: PauseExecution()
- C2 は、処理するアイテムを C1 に送信します (C1 の一部のデータを更新します)。
- C2 はメッセージを C1 に送信します: ResumeExecution()。
しかし今、最大の問題が発生します。
C1 が一時停止のために C2 にメッセージを送信し、同時に C22 が一時停止のために C1 にメッセージを送信すると、両方がブロックされます。
セマフォを保持するための集中サーバー/共有メモリはありません。
n台のコンピューターがブロックされないように使用できる別のパターンはありますか?
したがって、この質問はアルゴリズムによる除外に関するものです。
または、この問題の別の回避策はありますか?