平成25年度秋期 ITパスポート 問67 解説
あるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。

- ア共有領域のロック:時点(a) 共有領域のロック解除:時点(c)
- イ共有領域のロック:時点(a) 共有領域のロック解除:時点(d)
- ウ共有領域のロック:時点(b) 共有領域のロック解除:時点(c)
- エ共有領域のロック:時点(b) 共有領域のロック解除:時点(d)
答えを見る
正解 イ共有領域のロック:時点(a) 共有領域のロック解除:時点(d)
要点排他制御は読取り前にロックし書込み後に解除する
解説
複数のトランザクションが同じ値を読んで同時に更新すると、一方の更新が失われてしまいます。これを防ぐには、①で読み取る前の時点(a)でロックし、③で書き込んだ後の時点(d)で解除して、読取りから書込みまでの間ほかのトランザクションが割り込めないようにします。
- ア:時点(c)で解除すると、書込み前にほかのトランザクションが古い値を読めてしまうので誤り。
- ウ、エ:時点(b)でロックすると、ロック前に読み取った値が書き込みまでに変わる可能性があるので誤り。