質問編集履歴
4
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
では、ここで別の書籍のサンプルコードを見てみます。
|
42
42
|
```C++
|
43
|
-
volatile atomic_flag shared_lock;
|
43
|
+
volatile std::atomic_flag shared_lock;
|
44
44
|
|
45
45
|
void thread_function(int id){
|
46
46
|
while(shared_lock.test_and_set())
|
3
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
標準アトミック型と処理は、従来方式のロックフリーなコードに代わる、可搬性を持った代替手法を提供する。
|
16
16
|
|
17
17
|
**[疑問1]**
|
18
|
-
アトミック処理とは、ミュー
|
18
|
+
アトミック処理とは、ミューテックスと同じように排他的処理を提供するが、ミューテックスとは対照的にロックを使用しない。
|
19
19
|
つまり、**アトミック処理 = ロックフリー** 完全に同値なものだと解釈してよろしいのでしょうか?
|
20
20
|
アトミックとミューテックスを併用したプログラミングスタイルというものも存在するのでしょうか?
|
21
21
|
また、アトミック処理以外にもロックフリーを実現することは可能なのでしょうか??
|
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -119,4 +119,13 @@
|
|
119
119
|
疑問3と4は、アトミックとvolatileとメモリバリアの違いについての疑問です。
|
120
120
|
わかる方お願いします。
|
121
121
|
|
122
|
-
環境は、g++ Linux です。
|
122
|
+
環境は、g++ Linux です。
|
123
|
+
|
124
|
+
**[追記]**
|
125
|
+
疑問3については、[volatileが必要な場面を見つけ出す](https://teratail.com/questions/114172)の中でChironianさんが触れていることに非常に近いですね。
|
126
|
+
|
127
|
+
> なるほど。そう言えば、関数呼び出しを挟めば最適化が抑止されたことがありました。そのように規定されているのですね!(lock()が同期用のロックかどうかコンパイラは把握できない筈ですし)
|
128
|
+
アトミック変数はどうでしょう? 必要に応じて暗黙的にvolatileになるのでしょうか?
|
129
|
+
|
130
|
+
アトミック変数がvolatileの性質を含んでいるような気がしますが・・・
|
131
|
+
質問中のコードにはなぜvolatileが登場しているんでしょうかね・・・
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
標準アトミック型と処理は、従来方式のロックフリーなコードに代わる、可搬性を持った代替手法を提供する。
|
16
16
|
|
17
17
|
**[疑問1]**
|
18
|
-
アトミック処理とは、ミュータックスと同じように排他的処理を提供するが、ミューテックスとは対
|
18
|
+
アトミック処理とは、ミュータックスと同じように排他的処理を提供するが、ミューテックスとは対照的にロックを使用しない。
|
19
19
|
つまり、**アトミック処理 = ロックフリー** 完全に同値なものだと解釈してよろしいのでしょうか?
|
20
20
|
アトミックとミューテックスを併用したプログラミングスタイルというものも存在するのでしょうか?
|
21
21
|
また、アトミック処理以外にもロックフリーを実現することは可能なのでしょうか??
|