データベース
データベースの排他制御に関する記述として、適切なものはどれか。
ア.共有ロックが設定されているデータに対しては、他のトランザクションは共有ロックも専有ロックも取得できない。
イ.専有ロック(書き込みロック)中は、他のトランザクションが共有ロックを取得でき、データを読み取ることができる。
ウ.デッドロックとは、2つのトランザクションが互いに相手のロック解放を待ち続けて、どちらも処理を進められなくなる状態である。正解
エ.デッドロックを防ぐ最も一般的な方法は、すべてのロックを同時に取得せず、必要になるたびに順次取得することである。
解説
デッドロックは「交差点で東西南北の車が全員譲り合って誰も動けない」渋滞です。AがリソースXを持ったままYを待ち、BがYを持ったままXを待つ——どちらも永遠に待ち続けます。
なぜ ウ が正解か
デッドロックはトランザクションAがリソースXをロックしてYを待ち、同時にトランザクションBがリソースYをロックしてXを待つ状態で発生します。どちらも相手がロックを解放するのを待つため、外部介入(タイムアウト検知やデッドロック検出アルゴリズムによるロールバック)がないと永久に進まなくなります。
出典: AI生成問題(学習用)