Zenn
🗝️

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

2020/11/15に公開

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

今回は、「許可ベースの相互排除アルゴリズム」についてまとめました。
以下のように中央のリソースをプロセスが共有しているとします。

平等にリソースを使えれば何も問題はありませんが、
実際には偏りが生じます。

そうなると、左側のプロセスはいつまで経ってもリソースが使えません。
これでは困ります。
そこで、「許可を取ったプロセスがリソースを使える」
というルールを導入することにしました。

左側のプロセスはリクエストの状態を「true」にし、
他のプロセスに「request」というメッセージを送信します。

メッセージを受信したプロセスは、自分のリクエスト状態を「false」にし、
送信元のプロセスに「OK」というメッセージを送信します。

左側のプロセスは無事リソースを使用した後、
リクエストの状態を「false」に戻します。

<デッドロック>
一見解決したように見えますが、
複数のプロセスが同時に許可をリクエストした場合に問題が起きます。

自分のリクエスト状態を「true」にしてメッセージを送信しますが、
自分以外のプロセスもリクエスト「true」にしているため、
いつまで経っても「OK」というメッセージを受信することができず、
リソースを使うことができません。

このように、身動きができなくなる状態を「デッドロック」といいます。

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

Discussion

ログインするとコメントできます