分散システム
- 多数決合意
- Mutexを実現
アルゴリズム
- プロセスの集合をΠ=P0,P1,...,Pn−1とし、M=⌈(n+1)/2⌉とする(過半数)
- 各プロセスPiは、変数votePi(初期値: NULL)とキューwailtPi(初期値: ϕ)を持っている
- 資源Rへのアクセスを希望するとき
- M個のプロセスの集合Q⊂Πを選択
- Qから、プロセス番号kが小さい順に… ←これにより、Deadlockを回避している。定順要請法
- a. メッセージRequest(i)を送信
- b. PkからPerm(k)が届くのを待つ
- Rへのアクセスを開始する
- 資源Rへのアクセスを終了したとき
- これまで受信したPerm(j)を送信したプロセスの集合をPERMとする
- PERMに属する全てのプロセスPjにメッセージRelease(i)を送信する
- メッセージRequest(j)を受信したとき
- votePi= NULLなら: PjをwaitPiに挿入
- votePi=NULLなら:
- a. メッセージPerm(i)をPjに送信する
- b. votePi←Pj
- メッセージRelease(j)を受信したとき
- waitPi=ϕなら:
- a. waitPiから最初のプロセスPkを取り出す
- b. メッセージPerm(i)をPkに送信する
- c. votePi←Pk
- waitPi=ϕなら: votePi← NULL