• ベストアンサー

デッドロック(情報処理平成20年度午前問題)で教えてください

デッドロック(情報処理平成20年度午前問題)で教えてください。 問題 デッドロックが発生する可能性のある排他制御の方式はどれか。  ア 2 相ロックプロトコルに従ってロックする方式  イ 時刻印を用いて,トランザクションの優先順位を決める方式  ウ すべてのトランザクションにおいて,ロック対象のデータは   一定の順序でロックを行い,すべてのロックが完了するまで,   アンロックを行わない方式  エ トランザクション開始時に一括してロックする方式 回答はアです。  アが正解というのは分かるのですが、ウの間違いである理由がどうしても分からないのです。どなたか申し訳ありませんが教えていただけますか。  今週試験のため、回答を急がさせていただきました。

質問者が選んだベストアンサー

  • ベストアンサー
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

「すべてのトランザクションにおいて,‥一定の順序でロックを行い」という1文がミソ。 すべてのトランザクションが必ず一定の順序でロックされるならデッドロックは発生しない。 例えば、A,B、Cと三つのデータがある場合を想定し、下記のような条件があったとする。 ・CをロックするにはBのロックが必ず必要。 ・BをロックするにはAのロックが必ず必要。 すなわち、イメージ的にはBをロックするには下記のような手順が必要となる。 A⇒B また、Cをロックするには下記のようなロック手順が必要になる。 A⇒B⇒C これが、「すべてのトランザクションにおいて,‥一定の順序でロックを行う」ということ。 どのデータをロックするにしても開始点(例ならA)が同じになるので デッドロックを生じないことは明白。

greenday50
質問者

お礼

ありがとうございます。 この質問でいう「すべてのトランザクションにおいて,‥一定の順序でロックを行い」は、 すべてのトランザクションが扱う順序をそれぞれ順序一定にするということでなくて、 すべて一定ですね。 読解力のなさを痛感しました。

その他の回答 (1)

  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.2

デッドロックは発生しないから。 http://www.ibm.com/developerworks/jp/java/library/j-praxis/pr52.html http://docs.sun.com/app/docs/doc/819-0390/guide-35930?a=view デッドロックが発生する状況というのは、お互いが持っているリソースに対してロックをしようとした場合ですよね。 例えば、 ・アプリ1が資源Aにロックを掛けている ・アプリ2が資源Bにロックを掛けている 状態でアプリ1が資源Bにロックを掛けようとし、アプリ2が資源Aにロックしようとした場合はデッドロック。でも、ロックを掛ける順番を守っていれば防げたものです。 逆に、ロックするシチュエーションとはどのような形なのでしょうか?

greenday50
質問者

お礼

ありがとうございます。 外部リンクも大変参考になりました。

関連するQ&A