オペレーティングシステム

競合状態とクリティカルセクション

countをそれぞれ1増やしても、実行順により結果が1になることがあります。ボタンで順序を決めてください。

count++を3段階に分けた競合実験

例を実行

各スレッドのボタンで順序を選択

スレッドA
    Aのレジスタ-
    共有メモリ
    0
    count
    スレッドB
      Bのレジスタ-

        黄色は次の命令です。交互実行で更新消失を確認できます。

        count++は必ずしも不可分ではない

        このモデルは読込み、レジスタ加算、書込みの3段階です。その間にスレッドが切り替わると競合が起こります。

        両方が0を読んで1を書き戻すと、加算1回分が失われます。制御されない実行順に結果が依存するのが競合状態です。

        クリティカルセクション

        共有データを扱う範囲をクリティカルセクションと呼びます。1スレッドずつ全手順を行えば結果は2になります。同期には ミューテックスや セマフォです。