📑
分散処理を勉強した記録~その11~
この記事は、
「分散処理システム」著:真鍋義文 森北出版株式会社
を参考にしています。
今回は、「優先度を使う相互排除アルゴリズム」についてまとめました。
前回、ライブロックによって誰もリソースが使えない状態になってしまうパターンを紹介しました。
今回は、「優先度」という概念を導入してライブロックを防ごうという魂胆です。
左側のプロセスがリソースを使おうとすると、
ステータスを「requesting」
リクエストした時間をt1(その瞬間の時刻)と自身のIDの組み合わせ
に変更します。
その後、他のプロセスにリクエストした時間の情報を送信します。
リクエスト時間を受信したプロセスは、自分のリクエストした時間よりも早かった場合は「OK」メッセージを返しますが、そうでない場合は「waitingRequest」を返します。
この例では、他のプロセスはリクエストしていないので「OK」を返します。
他のプロセスから「OK」メッセージを受信したプロセスは、
receivedに「OK」メッセージを送信したプロセスのIDを格納します。
自分以外のすべてのプロセスのIDがReceivedに格納されると、
ステータスを「using」にしてリソースを使用します。
リソースを使い終わったら、ステータスを「null」にして終了です。
ここで、waitingRequestに他のプロセスのIDがあれば、
そのプロセス宛に「OK」メッセージを送信します。
今回はここまでです。ありがとうございました。
Discussion