基本情報技術者 2014年 秋期 午前(科目A) 問30
問題文
トランザクションの同時実行制御に用いられるロックの動作に関する記述のうち、適切なものはどれか。
選択肢
ア:共有ロック獲得済の資源に対して、別のトランザクションからの新たな共有ロックの獲得を認める。(正解)
イ:共有ロック獲得済の資源に対して、別のトランザクションからの新たな専有ロックの獲得を認める。
ウ:専有ロック獲得済の資源に対して、別のトランザクションからの新たな共有ロックの獲得を認める。
エ:専有ロック獲得済の資源に対して、別のトランザクションからの新たな専有ロックの獲得を認める。
トランザクションの同時実行制御に用いられるロックの動作【午前2 解説】
要点まとめ
- 結論: 共有ロックは読み取り用に複数トランザクションが同時に取得でき、専有ロックは書き込み時に資源を単独占有して排他制御を行いますので整合性を保ちます。
- 根拠: 共有(S)ロックは「複数の読み取りを許す」互換性があり、専有(X)ロックは他の共有・専有ロックと互換性がなく取得をブロックします。
- 差がつくポイント: 問題は「許可されるか否か」の即答力が鍵、共有→共有はOK、共有→専有は不可、専有→共有は不可、専有→専有は不可を瞬時に判断すること。
正解の理由
正解: ア
共有ロック(Shared, S)は複数のトランザクションによる同時読み取りを許可するため、あるトランザクションが共有ロックを持っている資源に対して別のトランザクションが新たに共有ロックを取得することを認めます。これはデータの読み取りには競合が生じないためで、整合性を損なわないからです。対して専有ロック(Exclusive, X)は書き込みを行うために取得され、他のいかなるロックも同時に許容しません。
共有ロック(Shared, S)は複数のトランザクションによる同時読み取りを許可するため、あるトランザクションが共有ロックを持っている資源に対して別のトランザクションが新たに共有ロックを取得することを認めます。これはデータの読み取りには競合が生じないためで、整合性を損なわないからです。対して専有ロック(Exclusive, X)は書き込みを行うために取得され、他のいかなるロックも同時に許容しません。
よくある誤解
- 「共有ロックがあると誰も書けないが読めないこともある」と誤解しやすいが、共有ロックは読み取りを許可するのが本来の目的です。
- 「専有ロックの後なら共有ロックは取れる」と考える受験者がいるが、専有ロック保持中は他トランザクションの共有取得も不可能です。
- 「ロック=同時実行が全て止まる」と考えがちだが、共有ロック同士は共存して同時読み取りを許します。
解法ステップ
- 用語整理: 共有ロック(S)=読み取り可、専有ロック(X)=書き込み可で排他。
- 互換性を確認: SとSは互換、SとXは非互換、XとSは非互換、XとXは非互換。
- 設問の各選択肢に対して「現在のロック」と「取得しようとするロック」の組合せを照合。
- 互換なら許可、非互換なら不許可と判断して正答を選ぶ。
選択肢別の誤答解説
- ア: 正解。共有ロック保持中に別トランザクションが共有ロックを取得することは許され、同時読み取りが可能となるため整合性を損なわない。
- イ: 誤り。共有ロック保持中に別トランザクションが専有ロック(書き込み用)を取得することは許されない。書き込みは排他を必要とするためブロックされる。
- ウ: 誤り。専有ロック保持中に別トランザクションが共有ロックを取得することは許されない。既に資源が単独占有されているため読み取りもブロックされる。
- エ: 誤り。専有ロックは排他的で、別トランザクションによる専有ロック取得は当然許されない。
補足コラム
ロックの互換性は簡単な行列で覚えると便利です。SはSと互換、Xはどちらとも互換しない、という覚え方で多くの午前問題は解けます。実運用では意図ロック(意図共有IS、意図専有IX)や階層ロック、楽観的ロックなど更に複雑な方式もあり、二相ロック(2PL)によるコミット前解放の制約で直列化可能性を保証します。デッドロック検出とタイムアウトも実用上重要です。
FAQ
Q1: 共有ロックの間で書き込みが必要になったらどうなる?
A1: 書き込み(専有ロック)を取得するには既存の共有ロックがすべて解放されるまで待つかトランザクションはブロック/ロールバックされます。
A1: 書き込み(専有ロック)を取得するには既存の共有ロックがすべて解放されるまで待つかトランザクションはブロック/ロールバックされます。
Q2: 専有ロックは読み取りも禁止しますか?
A2: はい。専有ロック保持中は他トランザクションによる読み取り(共有ロック取得)も禁止されます。保持者自身は読み書きとも可能です。
A2: はい。専有ロック保持中は他トランザクションによる読み取り(共有ロック取得)も禁止されます。保持者自身は読み書きとも可能です。
Q3: 共有→共有は常に安全か?データが変わる可能性は?
A3: 同時読み取りは安全ですが、読み取り後に更新を行う場合は専有ロックに移行する必要があり、その際に競合や待ちが発生する点に留意が必要です。
A3: 同時読み取りは安全ですが、読み取り後に更新を行う場合は専有ロックに移行する必要があり、その際に競合や待ちが発生する点に留意が必要です。
関連キーワード: 共有ロック、専有ロック、排他制御、二相ロック、デッドロック、ロック互換性、トランザクション管理

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

