カウントによるセマフォのテスト

multithreading semaphore
カウントによるセマフォのテスト

OS Xのセマフォに関する記事があります。 著者は、2つのスレッドで静的変数をインクリメントおよびデクリメントすることにより、セマフォをテストします。 セマフォが変数アクセスを保護すると、変数はゼロになります。 ガードなしでは、変数は何らかの偽の値を持つことになります。 コードを試してみましたが、動作します。 私が理解していないのは、2つのスレッドからの同時アクセスが最終的な変数値にどのような違いをもたらすかということです。 結局のところ、それは+1と-1の束のように思えます。 私は明白な何かが欠けていると感じていますが、それは何ですか? 🙂

  1  0


ベストアンサー

問題は、「++」/「-」がアトミックではないことです。 これらは基本的に3つの操作です。

  1. Load

  2. Inc / dec

  3. 格納

したがって、2つのスレッドが同時に値をロードし、同時に保存する場合。 差は2ではなく1になります。

サンプルはこちら

Thread A Thread B
Load 5   Load 5
Inc 6    Inc 6
Store 6  Store 6

4


タイトルとURLをコピーしました