🙇♂️
分散処理を勉強した記録~その10~
この記事は、
「分散処理システム」著:真鍋義文 森北出版株式会社
を参考にしています。
今回は、「リクエスト取り下げを行う相互排除アルゴリズム」についてまとめました。
前回はデッドロックが生じてしまい、
処理が止まってしまったので、今回はリクエストを取り下げる仕組みを導入します。
右上のプロセスは自身のリクエスト状態が「true」でしたが、
他のプロセスからリクエストメッセージを受信したので、
自身のリクエストを一旦「false」に変更し、
「OK」のメッセージを返信します。
そうすることによって、
左側のプロセスは無事リソースを使用することができます。
リソースの利用が終わったら、
左側のプロセスは自身のリクエスト状態を「false」にします。
右上のプロセスは取り下げていた自分のリクエスト状態を「true」に戻します。
その後は通常通りにリクエストメッセージを送信し、
「OK」メッセージの受信を確認してからリソースを使います。
<タイミングが被ったら>
もし仮に同時にリクエストメッセージを送信するとどうなるでしょうか。
同時にリクエスト状態を「true」にし、
リクエストメッセージを送信するので、
お互いに一旦要求を取り下げて「OK」メッセージを送信します。
そうすると誰もリソースを使えず、
再度リソースを使おうとしてリクエストメッセージを送信してしまいます。
こうなると、当初の目的を果たせず永遠にこのままです。
この状態を「ライブロック」と言います。
今回はここまでです。ありがとうございました。
Discussion