🙇‍♂️

分散処理を勉強した記録~その10~

2020/11/30に公開

この記事は、
「分散処理システム」著:真鍋義文 森北出版株式会社
を参考にしています。

今回は、「リクエスト取り下げを行う相互排除アルゴリズム」についてまとめました。
前回はデッドロックが生じてしまい、
処理が止まってしまったので、今回はリクエストを取り下げる仕組みを導入します。

右上のプロセスは自身のリクエスト状態が「true」でしたが、
他のプロセスからリクエストメッセージを受信したので、
自身のリクエストを一旦「false」に変更し、
「OK」のメッセージを返信します。

そうすることによって、
左側のプロセスは無事リソースを使用することができます。

リソースの利用が終わったら、
左側のプロセスは自身のリクエスト状態を「false」にします。
右上のプロセスは取り下げていた自分のリクエスト状態を「true」に戻します。

その後は通常通りにリクエストメッセージを送信し、
「OK」メッセージの受信を確認してからリソースを使います。

<タイミングが被ったら>
もし仮に同時にリクエストメッセージを送信するとどうなるでしょうか。

同時にリクエスト状態を「true」にし、
リクエストメッセージを送信するので、
お互いに一旦要求を取り下げて「OK」メッセージを送信します。

そうすると誰もリソースを使えず、
再度リソースを使おうとしてリクエストメッセージを送信してしまいます。

こうなると、当初の目的を果たせず永遠にこのままです。
この状態を「ライブロック」と言います。

今回はここまでです。ありがとうございました。

Discussion