📑

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

2020/12/06に公開

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

今回は、「優先度を使う相互排除アルゴリズム」についてまとめました。

前回、ライブロックによって誰もリソースが使えない状態になってしまうパターンを紹介しました。

今回は、「優先度」という概念を導入してライブロックを防ごうという魂胆です。

左側のプロセスがリソースを使おうとすると、
ステータスを「requesting」
リクエストした時間をt1(その瞬間の時刻)と自身のIDの組み合わせ
に変更します。

その後、他のプロセスにリクエストした時間の情報を送信します。

リクエスト時間を受信したプロセスは、自分のリクエストした時間よりも早かった場合は「OK」メッセージを返しますが、そうでない場合は「waitingRequest」を返します。
この例では、他のプロセスはリクエストしていないので「OK」を返します。

他のプロセスから「OK」メッセージを受信したプロセスは、
receivedに「OK」メッセージを送信したプロセスのIDを格納します。

自分以外のすべてのプロセスのIDがReceivedに格納されると、
ステータスを「using」にしてリソースを使用します。

リソースを使い終わったら、ステータスを「null」にして終了です。
ここで、waitingRequestに他のプロセスのIDがあれば、
そのプロセス宛に「OK」メッセージを送信します。

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

Discussion