
応用情報技術者試験基礎・応用
条件を読む・根拠を説明する
同時更新の取りこぼし
条件を整理し、答えを選んでから解き方を確認しましょう。
在庫10をT1とT2が同時に読み、各取引が1個減らした値9を後から書き戻した。両方が確定した最終在庫は9だった。適切な説明と対策の方向はどれか。
答え・解き方を読む
更新の取りこぼし。ロックや競合検出等で直列化可能な更新を設計
図で見る
同じ旧値を読んだ更新が上書きされる
同じ旧値を読んだ二処理が各自の計算結果を書き、後の書込みが先の更新を失わせます。ロック・原子的更新など、問題に対応した排他方法を検討します。
図は問題の関係を整理する模式図です。記号には各問題の数値を当てはめます。寸法・面積・時間の縮尺や、実施工の全条件は表していません。
考える順序
- 1正しく2個減れば最終在庫は8
- 2同じ旧値からの書戻しで片方の減算が失われた
- 3原子的な減算やロック・競合検出などで同時更新を制御する
選択肢ごとの理由
- 比較 · ダーティリード。読込値をキャッシュし続ける
他取引の未確定値を読んだという条件ではありません。
- 比較 · 主キー重複。列名だけ変更する
行の識別子重複が原因ではありません。
- 比較 · 計算丸め誤差。整数を浮動小数へ変える
整数1の減算で丸めが原因になる例ではありません。
- 正解 · 更新の取りこぼし。ロックや競合検出等で直列化可能な更新を設計
正しく2個減れば最終在庫は8。同じ旧値からの書戻しで片方の減算が失われた。原子的な減算やロック・競合検出などで同時更新を制御する。