高度試験 2024年(令和6年)春期 午前Ⅰ 問06

【問題】

 三つの資源 X ~ Z を占有して処理を行う四つのプロセス A ~ D がある。各プロセスは
 処理の進行に伴い、表中の数値の順に資源を占有し、実行終了時に三つの資源を一括し
 て解放する。プロセスAと同時にもう一つプロセスを動かした場合に、デッドロックを
 起こす可能性があるプロセスはどれか。

【選択肢】

 ア B, C, D
 イ C, D
 ウ C だけ
 エ D だけ

2024年度(令和6年度)春期 高度試験午前Ⅰより引用

 ↓↓答えを見る↓↓

 ・・

 ・・

 ・・

 ・・

 ・・

【答え】

 イ C, D

【解説】

 データベースにおけるデッドロックの問題です。

 デッドロックとは、
 「データベースを占有する複数のトランザクション処理を同時に実行する場合に、互いに次に必要になる表を占有してしまうことで、両方の処理が進まなくなること」

 トランザクションとは、複数の処理をまとめたもので、その処理の中にはデータベースへの書き込み処理が含まれます。「占有(ロック)」とは、自処理が処理している間に、他の処理が表の変更をできないように他の処理による変更を禁止することです。占有されている状態の表を、他の処理が変更しようとすると、ロックによって処理ができず、ロックが解除されるまで待たされることになります。

 デッドロックとなるのは下記のような状況です。
  トランザクション1は、①表Aを変更、②表Bを変更 という一連の処理からなる
  トランザクション2は、①表Bを変更、②表Aを変更 という一連の処理からなる
  トランザクション1とトランザクション2を同時に実行を開始する

 この場合、トランザクション1が②の処理をしようとするときに、トランザクション2の①の処理によって、表Bがロックされているため待たされます。他方、トランザクション2は②の処理をしようとするときに、トランザクション1の①の処理によって、表Aがロックされているため待たされます。お互いがお互いのロックの解放を待つため、いつまで待ってもロックが解消されません。

 ※なお、現在では、たいていのデータベースソフトウェアはデッドロックを検知して、エラーにより処理を強制終了してくれるのでデッドロックによって処理が止まったままにはなりません。

 デッドロックを防ぐために、下記のようなベストプラクティスがあります。
 ・デッドロックを防ぐには、複数の処理がある場合、いずれの処理も同じ順番で表をロックすること
  (逆の順番で表をロックするとデッドロックにつながる)

これらを踏まえて問題を確認します。

 トランザクションAが、X→Y→Zの順番で資源を占有する。これと同時に稼働させるとデッドロックが生じる処理がどれかを選べばよい。

 トランザクションBは、X→Y→Zと、トランザクションAと同じ順番で処理するためデッドロックが生じない。具体的には、最初に資源XがAとBで取り合いになる。仮にAの方が先に占有したとすると、Bは処理待ちになる。Aは、Xを占有したまま、Yを占有し、Zを占有して処理を終えると全ての占有を解放する。待っていたBが処理を再開し、X→Y→Zと占有した後、全ての占有を解放する。よって、デッドロックは生じない。

 トランザクションCは、Z→X→Yと、トランザクションAと逆の順番になっている箇所がある(XとZの処理順が逆)。そのためデッドロックが生じる。AはZの解放待ちをし、CはXの解放待ちをすることになる。

 トランザクションDも、トランザクションCと同様、トランザクションAと逆の順番になっている箇所がある(XとZの処理順が逆)。そのためデッドロックが生じる。AはZの解放待ちをし、CはXの解放待ちをすることになる。

よって正解は、「 イ C, D 」 となります。

PAGE TOP