質問編集履歴

4

修正

2018/12/25 03:16

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  ```C++
84
84
 
85
- volatile atomic_flag shared_lock;
85
+ volatile std::atomic_flag shared_lock;
86
86
 
87
87
 
88
88
 

3

修正

2018/12/25 03:16

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  **[疑問1]**
34
34
 
35
- アトミック処理とは、ミューックスと同じように排他的処理を提供するが、ミューテックスとは対照的にロックを使用しない。
35
+ アトミック処理とは、ミューックスと同じように排他的処理を提供するが、ミューテックスとは対照的にロックを使用しない。
36
36
 
37
37
  つまり、**アトミック処理 = ロックフリー** 完全に同値なものだと解釈してよろしいのでしょうか?
38
38
 

2

追記

2018/12/24 14:27

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -241,3 +241,21 @@
241
241
 
242
242
 
243
243
  環境は、g++ Linux です。
244
+
245
+
246
+
247
+ **[追記]**
248
+
249
+ 疑問3については、[volatileが必要な場面を見つけ出す](https://teratail.com/questions/114172)の中でChironianさんが触れていることに非常に近いですね。
250
+
251
+
252
+
253
+ > なるほど。そう言えば、関数呼び出しを挟めば最適化が抑止されたことがありました。そのように規定されているのですね!(lock()が同期用のロックかどうかコンパイラは把握できない筈ですし)
254
+
255
+ アトミック変数はどうでしょう? 必要に応じて暗黙的にvolatileになるのでしょうか?
256
+
257
+
258
+
259
+ アトミック変数がvolatileの性質を含んでいるような気がしますが・・・
260
+
261
+ 質問中のコードにはなぜvolatileが登場しているんでしょうかね・・・

1

修正

2018/12/24 12:07

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  **[疑問1]**
34
34
 
35
- アトミック処理とは、ミュータックスと同じように排他的処理を提供するが、ミューテックスとは対的にロックを使用しない。
35
+ アトミック処理とは、ミュータックスと同じように排他的処理を提供するが、ミューテックスとは対的にロックを使用しない。
36
36
 
37
37
  つまり、**アトミック処理 = ロックフリー** 完全に同値なものだと解釈してよろしいのでしょうか?
38
38