質問するログイン新規登録

質問編集履歴

4

修正

2018/12/25 03:16

投稿

strike1217
strike1217

スコア651

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

修正

2018/12/25 03:16

投稿

strike1217
strike1217

スコア651

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

追記

2018/12/24 14:27

投稿

strike1217
strike1217

スコア651

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

修正

2018/12/24 12:07

投稿

strike1217
strike1217

スコア651

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
  また、アトミック処理以外にもロックフリーを実現することは可能なのでしょうか??