FE Study
FE Study メニュー

学習記録はこのブラウザー内に保存されます。

ホーム問題を解く
ログイン不要・無料で学習

ONE QUESTION, ONE STEP

排他制御を学ぼう

選んで、確かめて、理解する。焦らず進めましょう。

科目AOS標準
QUESTION 34

二つのスレッドが共有変数countを1ずつ増やす。各スレッドは「countを読む」「読み取った値に1を足す」「countへ書く」の3段階を実行し、3段階全体は不可分ではない。更新の取りこぼしを防ぐ方法として適切なものはどれか。

出典:本サイト オリジナル教材(2026年)

本サイトで独自に作成。IPAの試験問題からの転載ではありません。

公開日:

解答を一つ選んでください

選択肢を選んで、答え合わせをしましょう。

回答せずに正解・解説を確認する

正解:ウ 読込みから書込みまで全体を、同じロックで排他制御する

この表示だけでは、回答数や正答率は変わりません。

解説

同じ初期値を二つのスレッドが読み、両方が同じ更新値を書き込むと、2増えるはずのcountが1しか増えないことがあります。共有値の読込み、加算、書込み全体を共通のロックで保護すれば、一方が更新を終えてから他方が最新値を読めます。

ア

読込み後にロックを外すと、二つのスレッドが同じ値を基に計算する可能性が残ります。

イ

書込み同士を直列にしても、どちらも古い値から計算していたら更新を失います。

ウ

共有値に対する一連の操作を一つのクリティカルセクションとして保護します。

エ

互いに別のロックでは同時実行を防げません。同じ共有資源を共通のロックで守る必要があります。

関連知識

適切な原子的加算命令も対策になります。この問題は3段階が不可分でないと明記しています。ロックを使う場合は例外時にも解放することや、複数ロックの順序にも注意します。

間違えやすいポイント

書込みだけを守ればよいと思わず、書き込む値を決める読込みも同じ保護範囲へ入れます。

覚え方

共有値の「読んで、変えて、書く」をまとめて守る。

実務での意味

在庫数やアクセス回数などを複数の処理から同時に更新するとき、更新単位を明確にします。

解説:本サイト編集部によるオリジナル文章

この問題の前後に、OSの基礎知識ガイドで、 仕組み・比較・解き方を確認できます。 この問題の誤りを報告する(GitHub)。問題IDとURLを入力した下書きが開きます。自動投稿は行いません。 投稿は公開されるため、氏名・住所・メールアドレス・学習記録は記入しないでください。 詳しくはお問い合わせ窓口をご覧ください。