- 1 名前:デフォルトの名無しさん [2017/08/10(木) 20:21:23.44 ID:hEocmkh50.net]
- C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 mevius.2ch.net/test/read.cgi/tech/1500293207/ www.geocities.jp/c_cpp_cs/about_c/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
- 369 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:10:54.21 ID:Z1NsXN0c0.net]
- >>358
いや、359ではなくて、363の言うとおり、 > ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。 これが問題だと思うぞ。つか、ロックしろよ。 volatileの意味分かってるか? それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。 ただしこの場合は、 > 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ? が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん? つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
- 370 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:20:05.48 ID:Z1NsXN0c0.net]
- >>363
調べてみたんだが、これか? > Microsoft 固有の仕様 → /volatile:ms の項目 > ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。 > つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、 > コンパイルされたバイナリでの volatile 書き込みの前に発生します。 > ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。 > つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、 > コンパイルされたバイナリでの volatile 読み取りの後に発生します。 https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx これならロックではなくフェンスだね。volatileでは直らないはず。
|

|