回答編集履歴

1

appendix

2018/08/30 03:52

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -7,3 +7,23 @@
7
7
 
8
8
 
9
9
  質問掲示コードは`my_struct::value`においてデータ競合(data race)を引き起こすため、プログラムは未定義動作となります。
10
+
11
+
12
+
13
+ ----
14
+
15
+
16
+
17
+ 題意とは直接関係しませんが、掲示コードの★箇所が気になりました。ここでの`t`は常にjoinableですから、`t.join();`とだけ書けば十分かと思います。また仮に`t.joinable()`がfalseだとすると、`t.detach()`は例外`std::system_error`をスローします(期待する動作ではないですよね?)
18
+
19
+
20
+
21
+ ```c
22
+
23
+ std::thread t(&myclass::mystruct_worker, &m, 10000);
24
+
25
+ // ...
26
+
27
+ t.joinable() ? t.join() : t.detach(); // ★
28
+
29
+ ```