基本情報技術者 2013年 秋期 午前(科目A) 問32
問題文
表は、トランザクション1〜3が資源A〜Cにかけるロックの種別を表す。また、資源へのロックはトランザクションの開始と同時にかけられる。トランザクション1~3のうち二つのトランザクションをほぼ同時に開始した場合の動きについて、適切な記述はどれか。ここで、表中の“-“はロックなし、“S”は共有ロック、“X”は専有ロックを示す。

選択肢
ア:トランザクション1の後にトランザクション3を開始したとき、トランザクション3の資源待ちはない。
イ:トランザクション2の後にトランザクション1を開始したとき、トランザクション1の資源待ちはない。(正解)
ウ:トランザクション2の後にトランザクション3を開始したとき、トランザクション3の資源待ちはない。
エ:トランザクション3の後にトランザクション1を開始したとき、トランザクション1の資源待ちはない。
トランザクションのロック待ち判定【午前2 解説】
要点まとめ
- 結論:正解はイ。T2の後にT1を開始してもT1は資源待ちせずロックを取得できる点が正解である。差がつくのは共有と排他の互換性の見極め。
- 根拠:T2は資源Aに共有ロック()、T1もAにを要求するため共有同士で競合せず、T1のもう一方の要求C:も空いている。順序で待ちが発生するかを資源ごとに判定する。
- 差がつくポイント:開始順を明確にして各資源で既にかかっているロックと互換性( vs は可、は不可)を逐一判断することが合否を分ける。
正解の理由
正解: イ
問題の前提は「資源へのロックはトランザクションの開始と同時にかけられる」こと。T2を先に開始すると、T2はA:、B:を確保します。続けてT1が開始すると、T1はA:、C:を要求します。Aについては既にT2がを持っているが同士は互換性があるため待ちになりません。Cは誰も持っておらずを取得できます。よってT1はどの資源でも待ちが生じず、選択肢イが正しいという理由です。
問題の前提は「資源へのロックはトランザクションの開始と同時にかけられる」こと。T2を先に開始すると、T2はA:、B:を確保します。続けてT1が開始すると、T1はA:、C:を要求します。Aについては既にT2がを持っているが同士は互換性があるため待ちになりません。Cは誰も持っておらずを取得できます。よってT1はどの資源でも待ちが生じず、選択肢イが正しいという理由です。
よくある誤解
- 「ほぼ同時に開始=同時に取得できる」と誤解する:設問は「後に開始したとき」を想定しており、開始順により取得状況が変わる点を見落としやすい。
- 「共有ロックは常に安全」と思い込む:共有は共有と互換だが、相手が排他()を持つと待ちになるので資源ごとに判定が必要。
- 複数資源の要求を一括で判断してしまう:一部の資源で待ちが発生すればトランザクション全体が待ちになる点を忘れやすい。
解法ステップ
- 表から各トランザクションの要求ロックを確認する(T1:A:,B:-,C: 等)。
- 「先に開始するトランザクション」をまずそのロックで確保したと仮定する。
- 「後に開始するトランザクション」が要求する各資源について、既に確保されているロックと互換性があるかを個別に判定する。
- 互換性ルール: vs → 可、 vs または vs / → 不可。
- いずれの資源でも待ちが発生しなければ「資源待ちなし」、1つでも不整合があれば「資源待ちあり」と判断する。
- 各選択肢で上記を当てはめ、正しい記述を選ぶ。
選択肢別の誤答解説
- ア: 「T1の後にT3を開始したとき、T3の資源待ちはない。」
- T1が先に持つのはA: と C:。T3はA: と B: を要求する。A: は既にT1のA:と競合するため、T3はAで待ちになる。よって誤り。
- イ: 「T2の後にT1を開始したとき、T1の資源待ちはない。」 ← 正解
- T2はA:, B:。T1はA:, C:。Aは同士で可、Cは空き。待ちなし。
- ウ: 「T2の後にT3を開始したとき、T3の資源待ちはない。」
- T2がA:, B:を持つと、T3のA:はA:と、B:はB:とそれぞれ競合する。少なくとも待ちが発生するため誤り。
- エ: 「T3の後にT1を開始したとき、T1の資源待ちはない。」
- T3はA:, B:。T1はA:を要求するがA:と競合するためT1は待ちになる。誤り。
補足コラム
- ロック互換性の基本は簡潔です:共有()は共有と共存できるが、排他()は単独だけ。問題演習では「資源ごとに」判定するクセをつけると速く正確に解けます。
- 実運用では二相ロック(Two-Phase Locking)やデッドロック検出・回復も重要です。本問は「開始直後に一括でロックが付与される」単純モデルの理解を問うものです。
- デッドロック発生例:Aをで持つプロセスとAをで要求するプロセスの組合せや、互いに相手の資源を待つケースが典型です。
FAQ
Q1. 「ほぼ同時に開始」とはどう扱えば良いですか?
A1. 本問の選択肢は「○の後に×を開始したとき」と順序を明示しているため、まず先に開始した側がロックを取得したと仮定して判定します。ほぼ同時=どちらが先に取得するかで結果が変わるケースがあるので順序指定を重視してください。
A1. 本問の選択肢は「○の後に×を開始したとき」と順序を明示しているため、まず先に開始した側がロックを取得したと仮定して判定します。ほぼ同時=どちらが先に取得するかで結果が変わるケースがあるので順序指定を重視してください。
Q2. 共有ロック()と排他ロック()の判断基準は?
A2. は複数トランザクションで同時に取得可能(読み取り共有)、を持つとその資源は独占され他は取得不可(書き込み等)。互換性表で常に確認します。
A2. は複数トランザクションで同時に取得可能(読み取り共有)、を持つとその資源は独占され他は取得不可(書き込み等)。互換性表で常に確認します。
Q3. 複数資源を要求する場合、どの時点で「待ち」と判断する?
A3. 後に開始したトランザクションが要求する各資源のうち1つでも既存ロックと互換性がなければ待ちになります(同時取得が前提なら、どれか一つの未取得で影響)。
A3. 後に開始したトランザクションが要求する各資源のうち1つでも既存ロックと互換性がなければ待ちになります(同時取得が前提なら、どれか一つの未取得で影響)。
関連キーワード: ロック互換性、共有ロック、排他ロック、資源待ち、デッドロック、二相ロック、トランザクション制御

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

