跳到正文

令和2年度 ITパスポート試験 問72

这道题的解析和你的作答记录。

問72
頻出度★☆☆

2台の PC から一つのファイルを並行して更新した。ファイル中のデータ n に対する処理が①~④の順に行われたとき,データ n は最後にどの値になるか。ここで,データ n の初期値は10であった。 PC-A 【処理内容】 ① データ n を読み込み,5を引く。 ③ 処理①の結果を,データ n に書き込む。 PC-B 【処理内容】 ② データ n を読み込み,7を足す。 ④ 処理②の結果を,データ n に書き込む。

出典 令和2年度 ITパスポート試験 問72
解説

問 72

  • 错误ア

    5 是③(PC-A 写入)刚完成时的值。如果④在③之前发生,或者由 PC-A 最后写入,5 才会保留;但本题的顺序中④是最后一步,所以 5 被④写入的 17 覆盖,不会作为最终值保留。

  • 错误イ

    10 是保持不变的初始值。这以两次写入都不生效为前提,但实际上③和④都执行了写入,至少最后一次④的结果会成为最终值,所以不会仍是 10。

  • 错误ウ

    12 是 10−5+7 的值,只有在加锁(互斥控制)正确生效、一方完成「读取→计算→写入」后另一方再读取最新值的串行执行下才能得到。但本题中两台 PC 读到的都是相同的初始值 10,发生了丢失更新,所以不会变成 12。

  • エ

    正解 数据 n 的初始值为 10,处理按①→②→③→④的顺序执行。①中 PC-A 读取 n(=10)并减去 5,把得到的 5 保存在自己的内存中。②中 PC-B 读取 n(=10)并加上 7,把得到的 17 保存在自己的内存中。此时两台 PC 读到的都是原始值 10。③中 PC-A 把结果 5 写入文件,n 变为 5;④中 PC-B 把结果 17 写入,n 变为 17。最后一次写入是④,所以最终值为「17」(エ)。PC-A 写入的 5 被④的写入覆盖而丢失(丢失更新=lost update)。

ここがポイント
  • 在没有加锁(互斥控制)的情况下,多个处理并行更新同一份数据时,后面的写入会覆盖前面的写入,发生「丢失更新(lost update)」,最终值取决于最后一个写入处理的结果。
  • 要保持事务的隔离性(ACID 特性中的 I=Isolation),需要加锁(互斥控制),否则就会像本题这样得到不一致的结果。
用語
解答問72エ
练这一题

作答记录