このスレッドを見てください:
= 3; b = 3;
そして、このスレッドを見てください:
b = 5; = 5;
どちらもモニターから同じデータにアクセスします。
両方が (スレッドを使用して) 同時に実行される場合、どのような結果が考えられますか?
このスレッドを見てください:
= 3; b = 3;
そして、このスレッドを見てください:
b = 5; = 5;
どちらもモニターから同じデータにアクセスします。
両方が (スレッドを使用して) 同時に実行される場合、どのような結果が考えられますか?
スレッドの操作は任意の順序で実行できるため、a=3,5 と b=3,5 の任意の組み合わせが可能です。
将来の読者のために明確にするために:
Thread-1: a=3 b=3
、
Thread-2: b=5 a=5
可能な操作命令:
I: スレッド 1、スレッド 1、スレッド 2、スレッド 2
II: スレッド 1、スレッド 2、スレッド 1、スレッド 2
III: スレッド 1、スレッド 2、スレッド 2、スレッド 1
IV: スレッド 2、スレッド 1、スレッド 2、スレッド 1
V: スレッド 2、スレッド 2、スレッド 1、スレッド 1
VI: スレッド 2、スレッド 1、スレッド 1、スレッド 2
それぞれ試してみましょう:
I: a=3, b=3, b=5, a=5 --> a=5, b=5
II: a=3, b=5, b=3, a=5 --> a=5, b=3
III: a=3, b=5, a=5, b=3 --> a=5, b=3
IV: b=5, a=3, a=5, b=3 --> a=5, b=3
V: b=5, a=5, a=3, b=3 --> a=3, b=3
VI: b=5, a=3, b=3, a=5 --> a=5, b=3
を思いつくには 4 つの方法があることに注意してくださいa=5,b=3
。したがって、各スレッドの順序付けにかなりの確率がある場合、その結果は最大 67% の確率で得られます。ただし、そのような確率の保証はありません。実際、OS が未知の方法で偏っていることはほぼ確実です。教訓は、未定義の動作に頼って何かをしようとするべきではないということです。
(最後の部分が質問の範囲を少し超えていたことは知っていますが、覚えておく必要があると思います。)