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

選択肢
ア:5
イ:10
ウ:12
エ:17(正解)
🔒 解説は解答すると表示されます
2台のPCによるデータの並行更新【ITパスポート 解説】
正解の理由
まず「読み込み」とはファイルから値を取り出すこと、「書き込み」とはファイルに値を保存することを意味します。処理の順序は図の通り①→②→③→④です。重要なのは、①と②はそれぞれ「読み込み+計算(ローカルでの処理)」までを行い、実際にファイルを変更するのは③と④の「書き込み」段階だという点です。
時系列で追うと次のようになります。
- ①でPC-Aがファイルから初期値 を読み取り、 を計算します(まだファイルは変わらない)。
- ②でPC-Bがファイルから値を読み取りますが、まだ書き込みが実行されていないため読み取る値は変わらず です。そこで を計算します(こちらもローカルで保持)。
- ③でPC-Aが計算結果 をファイルに書き込みます。ファイルは になります。
- ④でPC-Bが計算結果 をファイルに書き込みます。最後に上書きされてファイルは になります。
以上より、最終的な値は エ の 17 になります。
解法ステップ
- 初期値を確認:データn = 。
- ①(PC-Aの読み込み)で を読み、 を計算(結果はPC-A内に保持)。
- ②(PC-Bの読み込み)でまだファイルは変わっていないので を読み、 を計算(結果はPC-B内に保持)。
- ③(PC-Aの書き込み)でファイルを に更新。
- ④(PC-Bの書き込み)でファイルを に更新(最終値)。
- 結論:ファイルの最後の値は 。
式で表すと、
- PC-A の結果:
- PC-B の結果: 書き込みの順で最終は 。
選択肢別の誤答解説
-
ア: 5
これは「PC-Aが書き込んだ が最後まで残った」と考えた場合の値です。しかしその後にPC-Bが書き込みを行っているため上書きされ、最終的には残りません。 -
イ: 10
これは「どちらの書き込みも行われなかった」か「読み取りだけで書き込みが無効になった」と誤解した場合の値です。問題では③と④で実際に書き込みが行われていますので不正解です。 -
ウ: 12
これは「計算が順番に適用されて合成された」場合の値です。例えばPC-Aが書き込み(5)をしてからPC-Bがその新しい値を読み取り とする順序なら12になります。しかし与えられた実行順序(①→②→③→④)ではPC-BはPC-Aの書き込み前に読み込んでいるため、この状況には当たりません。 -
エ: 17
上の理由どおり、PC-Bが読み込んだ値は初期の であり、PC-Bの書き込みが最後に行われるため最終値は です。
よくある誤解
-
「並行(同時)にやっているから両方の処理が合算される」と考える誤り
並行処理(複数の処理が重なって実行されること)では、読み込みと書き込みのタイミング次第で結果が変わります。単純に「足し算・引き算が合算される」とは限りません。 -
「①~④の番号順=各PCの内部での順序だけで、ファイル操作の順序がわからない」と混同する誤り
問題文は①→②→③→④の順に処理が行われたと明示しています。番号の意味(読み込みか書き込みか)を正しく理解して順番に追うことが大事です。
補足コラム
今回の事例は「レースコンディション(race condition:どちらが先に書き込むかで結果が変わる事象)」にあたります。英語の "race" は「競争」の意味で、処理の順番が“競争”のように結果を左右します。実務ではこうした問題を避けるために次のような対策を使います。
- ロック(排他制御)を使う:ファイルやデータに鍵をかけ、同時に複数が変更できないようにする。
- トランザクション・バージョン管理:読み込み時点のバージョンと書き込み時のバージョンを検証し、競合があればやり直す(楽観的ロック)。
- 原子操作(atomic operation:途中で別の操作に割り込まれない一まとまりの処理):データベースなどでは加算・減算を「読んで計算して書く」の一連を安全に行う仕組みがある。
業務でデータを扱うときは「最後に誰が書き込んだかで結果が変わる」ことを意識して仕組みを設計します。
FAQ
Q1: もしPC-Bの書き込みがなかったら最終値はどうなりますか?
A1: その場合はPC-Aが書き込んだ が最終値になります(選択肢アの状況)。
A1: その場合はPC-Aが書き込んだ が最終値になります(選択肢アの状況)。
Q2: どうして「10→12」にならないのですか?
A2: 12になるのはPC-BがPC-Aの書き込み後に読み込む順序(読み込み②が③の後)であれば可能です。しかし問題では②が③より先に行われています。読み取りのタイミングが決め手です。
A2: 12になるのはPC-BがPC-Aの書き込み後に読み込む順序(読み込み②が③の後)であれば可能です。しかし問題では②が③より先に行われています。読み取りのタイミングが決め手です。
Q3: 現場ではこういう問題はどうやって防ぐのですか?
A3: ファイルロックやデータベースのトランザクション、原子的な更新操作などで競合を防ぎます。実務では「排他制御(ロック)」や「楽観的ロック(バージョン管理)」がよく使われます。
A3: ファイルロックやデータベースのトランザクション、原子的な更新操作などで競合を防ぎます。実務では「排他制御(ロック)」や「楽観的ロック(バージョン管理)」がよく使われます。
関連キーワード: 並行処理、競合(コンフリクト)、レースコンディション、読み込み・書き込み、排他制御、ファイルロック、原子操作、同期、上書き、トランザクション

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

