ITパスポート試験 / 平成24年度 秋期 ITパスポート試験 / 問80
certification-simodake-work

平成24年度 秋期 ITパスポート試験 問80 解説 在庫管理システムの処理順序

設問図

ある在庫管理システムでは、複数の入力を同時に並行して処理し、在庫数を更新しているが、排他制御は行っている。ある時点での在庫数が100であったとき、入力された二つの入力A, Bに応じて、図に示す処理が①→②→③→④の順序で実行された場合、処理④が終了した時点の在庫数は幾つになるか。

  1. ア 70 ✓ 正答
  2. イ 100
  3. ウ 120
  4. エ 150

解説

在庫数100を基準として、各処理が実行された順序に従い、在庫データの読み取りと書き込みの数値を逐一シミュレーションすることで正解を導き出します。

処理の流れを追いかける手順

この問題は「データの読み取り」と「データの書き込み」のタイミングが重要です。システムが変数から値を読み取り、計算して書き戻すまでの間を追いかけます。

  1. 初期状態:在庫数 100
  2. 処理①(入力A):在庫数 100 を読み込む
  3. 処理②(入力B):在庫数 100 を読み込む(※排他制御がないため、Aが更新する前の値を読み込んでしまいます)
  4. 処理③(入力A):100 + 50 = 150 を在庫に書き込む
  5. 処理④(入力B):100 - 30 = 70 を在庫に書き込む

結果として、処理④が終わった時点の在庫数は 70 となります。

排他制御とデータの不整合

この問題の鍵は、排他制御が行われていないことによる「更新の消失」という現象にあります。

コンピュータ上の処理において、在庫の更新は「読み込み」→「計算」→「書き込み」というステップで行われます。排他制御(ロック)がない場合、複数の処理が同時に同じデータに対してこのステップを実行しようとします。

今回のケースでは、入力Bが処理を開始した時点では、まだ入力Aによる更新(150への書き込み)が完了していませんでした。その結果、入力Bは古い在庫数(100)を元に計算してしまい、最終的に入力Aの計算結果(+50)が、入力Bによる書き込み(70)で上書きされて消えてしまったのです。

システム開発における重要性

この問題は、データベースやプログラムにおいて、なぜ排他制御が重要なのかを教えてくれます。

銀行の口座残高やチケット予約システムなどの在庫管理システムでは、このような並行処理が頻繁に行われます。もし排他制御が正しく実装されていないと、誰かが購入した在庫が正しく反映されなかったり、逆に在庫数が実際よりも多く(または少なく)計算されてしまうような重大なバグが発生します。

実務においては、トランザクション処理を用いて、処理が完了するまで他の処理がデータに干渉できないようにロックをかけたり、分離レベルを適切に設定したりすることで、データの整合性を維持します。ITパスポートの試験では、概念的な仕組みを理解するだけでなく、実際にデータがどのように変化するかという「処理の順序」を追う力が非常に重要です。

参考リンク

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう