Webページへのアクセス件数を調べる目的でアクセスカウンタを作成した。
図に示すとおり,2人の閲覧者が同時にアクセスしたところ,サーバ内の処理は①〜④の順序で実行された。
2人がアクセスする前のアクセスカウンタの値が100であったとすると,処理④が終了した時点のアクセスカウンタの値は幾らになるか。
閲覧者1の〔処理内容〕:① アクセスカウンタを読み込み,1を加算する/③ アクセスカウンタに処理①の結果を書き込む
閲覧者2の〔処理内容〕:② アクセスカウンタを読み込み,1を加算する/④ アクセスカウンタに処理②の結果を書き込む
閲覧者1,閲覧者2はインターネットを介してサーバのアクセスカウンタにアクセスする。
正答2
解説
正解は2です。
2人の閲覧者が同時にアクセスカウンタを更新したときの結果を追う問題です。
図では、閲覧者1の処理が①(読み込んで1を加算)と③(書き込み)、閲覧者2の処理が②(読み込んで1を加算)と④(書き込み)です。
2つの処理が、サーバ上の同じアクセスカウンタを読み書きしています。
処理は①、②、③、④の順に実行されています。
【計算】
①で閲覧者1はカウンタの値100を読み込み、1を加算して101を得ます。
②で閲覧者2も、まだ書き込まれていない100を読み込み、101を得ます。
③で閲覧者1が101を書き込みます。
④で閲覧者2も101を書き込みます。
最終的なカウンタの値は101です。
【選択肢別解説】
1:× ③と④で書込みが行われるので、値が100のまま残ることはありません。
2:○ 2人とも更新前の100を読んで101を書き込むので、結果は101になります。
1回分のカウントが失われています。
3:× 102になるのは、一方の書込みが終わってから他方が読み込んだ場合です。
今回の順序では102になりません。
4:× カウンタは1回のアクセスで1しか増えないので、104になることはありません。
【ポイント】
読み込みから書込みまでの間に別の処理が割り込むと、更新が失われることがあります(ロストアップデート)。
ロックによる排他制御をかけると、正しく102になります。