X



C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
垢版 |
2017/08/10(木) 20:21:23.44ID:hEocmkh50
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0361デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
垢版 |
2017/09/23(土) 22:28:00.05ID:9QRg4G5c0
volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
0363デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
垢版 |
2017/09/23(土) 22:58:35.90ID:PasvkTo90
何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな

まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
0364デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
垢版 |
2017/09/23(土) 23:10:54.21ID:Z1NsXN0c0
>>358
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?

つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
0365デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
垢版 |
2017/09/23(土) 23:20:05.48ID:Z1NsXN0c0
>>363
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
>  つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
>  つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況