回答編集履歴
1
appendix
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
|
+
```
|