跳到正文

平成22年度 春期 ITパスポート試験 問82

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

問82
頻出度★☆☆

2台のPCから一つのファイルを並行して更新した。ファイル中の同一データ(データ1)に対する処理が①~④の順に行われたとき,データ1はどの値になるか。ここで,データ1の初期値は5であった。

PC−A 【処理内容】PC−B 【処理内容】
① データ1を読み込み,10を足す。② データ1を読み込み,1を引く。
③ ①の結果を,データ1に書き込む。④ ②の結果を,データ1に書き込む。
出典 平成22年度 春期 ITパスポート試験 問82
解説

問 82

  • ア

    正解 按 ①~④ 的顺序,追踪每个处理「何时读取、何时写入」,答案就出来了。初始值是 5。① 中 PC−A 读取数据 1,但此时文件中的值是 5,所以 A 在自己这边算出 5+10=15。② 中 PC−B 读取数据 1,但 ③ 的写入尚未进行,文件中的值依然是 5,所以 B 在自己这边算出 5−1=4。③ 中 PC−A 把 ① 的结果 15 写入文件,数据 1 变成 15。④ 中 PC−B 写入 ② 的结果 4,于是刚才的 15 被覆盖而消失,数据 1 最终变成 4。这里发生的现象是:在不做互斥控制(加锁)的情况下并发更新同一数据时,先反映进去的更新(+10)被之后的写入弄丢了,即「更新丢失(lost update)」。因此正确答案是 ア(4)。

  • 错误イ

    5 就是更新之前的初始值本身。③ 和 ④ 中确实对文件进行了写入,所以值不可能保持初始值不变。而且 +10 与 −1 并不会互相抵消,因此也不能理解成两次更新相互抵消后又回到了 5。

  • 错误ウ

    14 是 5+10−1,也就是 PC−A 与 PC−B 双方的更新都被正确反映后「本应得到的值」。这是在互斥控制(加锁)起作用、② 在 ③ 写入之后才读取时的结果;而在本题 ①→②→③→④ 的顺序下,② 读到的是写入之前的 5,所以 B 的计算结果不是 14 而是 4。

  • 错误エ

    15 是 ③ 中 PC−A 刚写入之后的值,但在最后的 ④ 中 PC−B 会写入自己的计算结果 4,因此 15 被覆盖而不会留下来。要注意本题问的是执行完 ④ 之后的最终值。

ここがポイント
  • 如果多个用户在不做互斥控制的情况下并发更新同一数据,后进行的写入就会覆盖先前的更新,使先前的更新丢失,这就是「更新丢失(lost update)」。每个处理在计算时用的都是「自己读取那一刻的值」,之后对方写入的值不会反映进来。
  • 防止这种情况的机制就是互斥控制(加锁)。把从读取到写入的一连串操作当作一个事务来处理,让另一方等待,两方的更新就都能被正确反映,得到 5+10−1=14。
用語
解答問82ア
练这一题

作答记录