本文へ移動
✓ 合格ドリル基礎から練習

基本情報技術者 / 条件・事例の練習

基本情報技術者試験基礎・応用

条件を読む・根拠を説明する

加算命令を分割すると起こること

条件を整理し、答えを選んでから解き方を確認しましょう。

共有x=10。二つのスレッドがそれぞれread(x)、local+1、write(x)を実行する。どちらも10を読んでから順に11を書いた。結果と対策はどれか。

答え・解き方を読む

11となり更新が一つ失われるため一連の処理を排他化する

図で見る
同じ旧値を読んだ更新が上書きされる
同じ旧値を読んだ更新が上書きされる
同じ旧値を読んだ更新が上書きされる図を拡大して見る ↗

同じ旧値を読んだ二処理が各自の計算結果を書き、後の書込みが先の更新を失わせます。ロック・原子的更新など、問題に対応した排他方法を検討します。

図は問題の関係を整理する模式図です。記号には各問題の数値を当てはめます。寸法・面積・時間の縮尺や、実施工の全条件は表していません。

考える順序

  1. 1両スレッドは同じ10から11を計算
  2. 2後の11の書込みは先の増加を反映しない
  3. 3読取りから更新までを一つの保護区間等にする

選択肢ごとの理由

  • 比較 · readだけ排他化すればその後の同時加算は必ず安全

    読取り後の更新まで分離されると同じ競合が残ります。

  • 正解 · 11となり更新が一つ失われるため一連の処理を排他化する

    両スレッドは同じ10から11を計算。後の11の書込みは先の増加を反映しない。読取りから更新までを一つの保護区間等にする。

  • 比較 · 12となるので排他は不要

    二つとも古い値を基にするので12にはなりません。

  • 比較 · 11は正しい二回の加算結果なので対策不要

    二回加算した業務上の結果は12であり更新が失われています。

学習アプリで条件・事例を5問 →

学習の参考資料

用語・仕組みを学ぶための参考資料です。設問の条件と、このページの解き方を併せて確認してください。

教材の作成・確認方法

関連する要点をまとめて読む

技術の入口の要点と練習一覧 →