- C++相談室 part120 [転載禁止]©2ch.net
209 :デフォルトの名無しさん[sage]:2015/10/30(金) 13:07:58.90 ID:lB31ouJc - そのスレッドから見える結果としての順序が変わらなければ入れ替わることもある
メモリバリアとかmutexを適切に入れてないと他のスレッドから見たときに有り得ない結果が見えたりする 例えば int a=0; int b=0; void c()//スレッド1で実行 { a=3; b=5; } void c()//スレッド2で実行 { if(b==5)assert(a==3);//bに5が代入されてたらaはそのまえに3が代入されてるはずだけど? } と書いた時にassertに引っかかることはありえる
|
- C++相談室 part120 [転載禁止]©2ch.net
211 :デフォルトの名無しさん[sage]:2015/10/30(金) 13:16:02.00 ID:lB31ouJc - >>210
何の話?
|
- C++相談室 part120 [転載禁止]©2ch.net
213 :デフォルトの名無しさん[sage]:2015/10/30(金) 13:18:15.86 ID:lB31ouJc - >>212
無いよ 副作用が無ければ入れ替わることがあるって間違った知識の人が居たから書いただけ
|
- C++相談室 part120 [転載禁止]©2ch.net
217 :デフォルトの名無しさん[sage]:2015/10/30(金) 13:43:37.44 ID:lB31ouJc - >>214
お前が何言ってんだよ >>196 に関係ある話をすると a() b() 結果はa()が呼ばれてからb()が呼ばれるのと同じになる。 そのスレッドから見える結果が同じであればコンパイラはその中でどう入れ替えてもいい。 でも結果が同じであることは保証されてるんだからプログラマはa(),b()の順序で呼ばれるものとして扱っていい 上に書いたけど前提としてすべて単一のスレッドから見えるという条件付き
|
- C++相談室 part120 [転載禁止]©2ch.net
234 :デフォルトの名無しさん[sage]:2015/10/30(金) 20:36:46.36 ID:lB31ouJc - >>223
なぜどのコンストラクタが呼ばれるかを気にしないといけないと思ったのか
|
- C++相談室 part120 [転載禁止]©2ch.net
236 :デフォルトの名無しさん[sage]:2015/10/30(金) 22:19:58.57 ID:lB31ouJc - >>235
なんで? どっちだとしても、どっちでもないにしてもAがf()の返り値で初期化されるのは変わらんだろ?
|
- C++相談室 part120 [転載禁止]©2ch.net
237 :デフォルトの名無しさん[sage]:2015/10/30(金) 22:24:11.00 ID:lB31ouJc - >>231
副作用があっても入れ替わることはある。 ただ、お前の思っている副作用と俺の思っている副作用が違う可能性はある 俺の思っている副作用はそれぞれの関数の副作用、関数が出てきて副作用といったら普通こっちを指すと思う。
|
- C++相談室 part120 [転載禁止]©2ch.net
239 :デフォルトの名無しさん[sage]:2015/10/30(金) 22:40:39.72 ID:lB31ouJc - >>238
副作用の有無は関係ないって事だよ 解らない?
|
- C++相談室 part120 [転載禁止]©2ch.net
241 :デフォルトの名無しさん[sage]:2015/10/30(金) 22:59:04.67 ID:lB31ouJc - >>240
> コンパイラーの出力するコードの話なのか > 実際に実行されるコードの話なのか どちらも入れ替わることはある > 入れ替わってないけど入れ替わったように観測される話なのか それを実行しているスレッドからは入れ替わってないように観測される その他のスレッドから観測したときはメモリバリアやmutexなどが入ってないと未定義 デバッガは後者だからステップ実行してても色々な所に飛んでるように見えたりする。結果は変わらないように入れ替わってるけどね はっきりしてる
|
- C++相談室 part120 [転載禁止]©2ch.net
245 :デフォルトの名無しさん[sage]:2015/10/30(金) 23:07:34.90 ID:lB31ouJc - >>242
「副作用がなければ」を何処にやったん? 大丈夫? if文とか書ける?if文あっても無視してコード読むタイプ?
|
- C++相談室 part120 [転載禁止]©2ch.net
246 :デフォルトの名無しさん[sage]:2015/10/30(金) 23:18:35.20 ID:lB31ouJc - >>243
メンバ変数に値を代入することも副作用て言うからね 詳しくはググってね
|
- C++相談室 part120 [転載禁止]©2ch.net
249 :デフォルトの名無しさん[sage]:2015/10/30(金) 23:29:52.59 ID:lB31ouJc - >>247
だからプログラマーが困らない(結果が変わらない)範囲で入れ替わることはあるんだって言ってるじゃない コンパイラの最適化をなめたらいかんよ
|