回答編集履歴

1

誤記修正

2021/01/15 14:08

投稿

dodox86
dodox86

スコア9256

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 恐らくですが、実行環境に依存してそのような結果になっています。動作させているPCが速過ぎて、`ThreadProcessP2`スレッドが走り始めて`A=0, B=100`の状態がしばらく続き、その状態を出力し続け、`ThreadProcessP1`の実行が割り当てられたら一気に`A=100、B=0`まで処理を実行した後、`ThreadProcessP2`に実行が移っています。ちなみに当方の非力で遅いWindows PC(Windows 10の Cygwin環境)で試したところ、「A + B = 100」で正しく動きましたし、`std::lock_guard<std::mutex> lock(mutex);`を除去すると「A + B ≠ 100」となりました。
5
+ 恐らくですが、実行環境に依存してそのような結果になっています。動作させているPCが速過ぎて、`ThreadProcessP2`スレッドが走り始めて`A=100, B=0`の状態がしばらく続き、その状態を出力し続け、`ThreadProcessP1`の実行が割り当てられたら一気に`A=0, B=100`まで処理を実行した後、`ThreadProcessP2`に実行が移っています。ちなみに当方の非力で遅いWindows PC(Windows 10の Cygwin環境)で試したところ、「A + B = 100」で正しく動きましたし、`std::lock_guard<std::mutex> lock(mutex);`を除去すると「A + B ≠ 100」となりました。
6
6
 
7
7
 
8
8