ITパスポート過去問 令和2年度(2020年)問72
2台のPCから一つのファイルを並行して更新した。ファイル中のデータnに対する処理が①~④の順に行われたとき,データnは最後にどの値になるか。ここで,データnの初期値は10であった。

選択肢
- ア:5
- イ:10
- ウ:12
- エ:17
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
①と②はどちらも初期値n=10を読み込みます。PC-Aは10-5=5を計算して③で書き込みますが、PC-Bは読取り時の10に7を足した17を保持しており、④で17を書き込んで上書きします。したがって最終値は17です。
Point
この問題は、複数のPCが同じデータを並行して更新する場合に、読取り時点の値を使って計算した結果が後から書き込まれ、書込み順によって最終値が決まることを理解するためのものです。
解くために必要な知識
この問題を解くには、並行処理における読み込みと書き込みの扱い、排他制御がない場合に起きる上書きの考え方を理解している必要があります。
用語の整理
| 用語 | 意味 |
|---|---|
| 並行処理 | 複数の処理が同じ時間帯に進むことです。処理の実行順序によって結果が変わる場合があります。 |
| 排他制御 | 同じデータに同時に更新が入らないように制御する仕組みです。ロックと呼ばれることもあります。 |
| 同時更新問題 | 排他制御がない状態で複数の処理が同じデータを更新し、片方の更新がもう片方に上書きされる問題です。 |
図表の読み取り方
1. 実行順序を確認する
処理番号(①②③④)が実行順序を表します。問題文で「①~④の順」と指定されています。
2. 読み込みと書き込みを分ける
-
読み込み
- その時点のファイル上の値をPCが取り込みます。
- 取り込んだ値を使ってPC内で計算します。
-
書き込み
- PC内で計算した結果をファイルに反映します。
- 後の書き込みが前の書き込みを上書きする場合があります。
解くための手順
-
初期値を確認します。
-
①~④を順番に見て、次を分けて記録します。
- ファイル上のnの値
- 各PCが読み込んだ値と計算結果
-
最後に行われた書き込み後のファイル上のnが答えです。
問題の解法手順
この問題では、①~④の順に、ファイル上のnと各PC内で保持している計算結果を分けて追います。
図から読み取れる処理
-
PC-A
- ① データnを読み込み、5を引く
- ③ 処理①の結果をデータnに書き込む
-
PC-B
- ② データnを読み込み、7を足す
- ④ 処理②の結果をデータnに書き込む
時系列での値の変化
| 手順 | 実行 | 操作内容 | PC内の計算結果 | ファイル上のn |
|---|---|---|---|---|
| 初期 | ー | 初期値 | ー | 10 |
| ① | PC-A | 10を読み込み、5を引く | PC-A: 10 - 5 = 5 | 10 |
| ② | PC-B | 10を読み込み、7を足す | PC-B: 10 + 7 = 17 | 10 |
| ③ | PC-A | PC-Aの結果5を書き込む | ー | 5 |
| ④ | PC-B | PC-Bの結果17を書き込む | ー | 17 |
結論
最後の書き込みは④なので、ファイル上のnは17になります。
選択肢ごとの解説
- ア:不正解
③でPC-Aが書き込んだ直後の値です。ただし④でPC-Bが書き込んで上書きするため、最終値にはなりません。
- イ:不正解
初期値です。③と④で書き込みが行われるため、最終値にはなりません。
- ウ:不正解
PC-BがPC-Aの書き込み後の値5を読み込んで計算した場合(5 + 7 = 12)に起こり得る値です。本問では②が③より先なので、PC-Bは10を読み込みます。
- エ:正解
②でPC-Bは10を読み込んで17を計算し、④でそれを書き込みます。④が最後の書き込みなので、最終値は17です。
まとめ
①と②はどちらも初期値n=10を読み込みます。PC-Aは10-5=5を計算して③で書き込みますが、PC-Bは読取り時の10に7を足した17を保持しており、④で17を書き込んで上書きします。したがって最終値は17です。
テクノロジ系 > 技術要素 > データベース
③でPC-Aが書き込んだ直後の値です。ただし④でPC-Bが書き込んで上書きするため、最終値にはなりません。
初期値です。③と④で書き込みが行われるため、最終値にはなりません。
PC-BがPC-Aの書き込み後の値5を読み込んで計算した場合(5 + 7 = 12)に起こり得る値です。本問では②が③より先なので、PC-Bは10を読み込みます。
②でPC-Bは10を読み込んで17を計算し、④でそれを書き込みます。④が最後の書き込みなので、最終値は17です。