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
探検
C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
2017/08/10(木) 20:21:23.44ID:hEocmkh50289デフォルトの名無しさん (ワッチョイ ba89-l0Z7)
2017/09/13(水) 00:05:26.05ID:iyeBQ3Kc0 コーダーだから馬鹿だとは思わないが、>>288みたいなレスをするのは馬鹿だなと思いました。
290デフォルトの名無しさん (アウアウウー Sa47-ktFK)
2017/09/13(水) 10:49:46.10ID:gIW5dRYoa >>239
ありがとうございました
ありがとうございました
291デフォルトの名無しさん (ワッチョイ db0d-QyhX)
2017/09/13(水) 10:57:10.59ID:E2QlRAh70 >>287
puts("Hell 'o work?");
puts("Hell 'o work?");
292デフォルトの名無しさん (ワッチョイ 1af4-QyhX)
2017/09/13(水) 11:29:24.17ID:tSE5B5Al0 printf("HALO world!");
293デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 12:41:46.69ID:cFJcbLHs0294デフォルトの名無しさん (ワッチョイ b3a3-v0Ju)
2017/09/13(水) 13:17:09.64ID:z6o40qKf0 >>293
安価に取り替えがきくので、低く見られるのはしょうがないと諦めろ
安価に取り替えがきくので、低く見られるのはしょうがないと諦めろ
295デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 13:33:05.82ID:cFJcbLHs0 人件費のダンピングは国が国民を保護する義務の対象だが
真面目にやってくれなくて我々はその被害を受けているのだ
本来、能力に応じた収入があるべきという感覚そのものを
捨てちまったブタはいいねえ悩みがなくて
真面目にやってくれなくて我々はその被害を受けているのだ
本来、能力に応じた収入があるべきという感覚そのものを
捨てちまったブタはいいねえ悩みがなくて
296デフォルトの名無しさん (ワッチョイ b3be-v0Ju)
2017/09/13(水) 14:36:38.24ID:GgkwnlJN0 >>295
本来能力に応じた報酬を受け取るべきと考えて、それが受け取れない事に不満を持った連中はとっくに逃げ出してる
残ってるお前らは不満を持ちながら逃げ出す事さえ出来ないゴミ
下に見られてもしょうがない
本来能力に応じた報酬を受け取るべきと考えて、それが受け取れない事に不満を持った連中はとっくに逃げ出してる
残ってるお前らは不満を持ちながら逃げ出す事さえ出来ないゴミ
下に見られてもしょうがない
297デフォルトの名無しさん (アウアウカー Sa43-OnxZ)
2017/09/13(水) 14:42:45.38ID:yshNp3B/a 確かに馬鹿な奴もいるけどレベルの高い奴もいる。コーダーに限った話じゃないだろ。
日本に馬鹿が多いんだよ。たぶん。
日本に馬鹿が多いんだよ。たぶん。
298デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 15:31:18.76ID:cFJcbLHs0299デフォルトの名無しさん (ワッチョイ 47c2-x/0H)
2017/09/13(水) 15:43:10.20ID:lgdTeqni0 3桁ってことか
300デフォルトの名無しさん (スフッ Sdba-ALM6)
2017/09/13(水) 16:11:37.47ID:PJsF5JPod 時給だろ。
301デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 16:18:46.88ID:cFJcbLHs0 妻子持ちがどのくら金いるか
童貞にはわからんようだな
童貞にはわからんようだな
302デフォルトの名無しさん (ワッチョイ 1a1b-ajxu)
2017/09/13(水) 16:31:08.86ID:J/ZU3q6K0 板違いが分からないよりマシ
303デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 16:42:40.48ID:cFJcbLHs0 284にぬかせボケ
304デフォルトの名無しさん (ワッチョイ 3b00-xkdj)
2017/09/13(水) 17:15:26.17ID:7kZqRPKj0 クソスレ過ぎ笑う
305デフォルトの名無しさん (ワッチョイ 5f6f-v0Ju)
2017/09/13(水) 19:04:55.78ID:FmzSjQYZ0306デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 19:25:13.27ID:cFJcbLHs0307デフォルトの名無しさん (スププ Sdba-uTHE)
2017/09/13(水) 19:29:03.36ID:E/jL69iKd 複雑な立場だなww
308デフォルトの名無しさん (ワッチョイ 5f6f-v0Ju)
2017/09/13(水) 19:36:56.55ID:FmzSjQYZ0 >>306
僕のお父さんは奴隷のリーダーですってか?
僕のお父さんは奴隷のリーダーですってか?
309デフォルトの名無しさん (ワッチョイ 17e3-x/0H)
2017/09/13(水) 20:24:58.56ID:ruF3Cq7F0 実際のところそれでも結構なもんだ
310デフォルトの名無しさん (フリッテル MM06-bZ49)
2017/09/13(水) 21:33:37.15ID:qtzqYGs4M 馬鹿な奴隷に指示、管理する者の気苦労が分からんのか
311デフォルトの名無しさん (ドコグロ MM92-Qch9)
2017/09/13(水) 21:35:35.97ID:PcFMQESFM312デフォルトの名無しさん (ワッチョイ 17e3-x/0H)
2017/09/13(水) 21:50:53.77ID:ruF3Cq7F0 金持ちしか子供作らせないのは国策
やつらに恥などない
怒れ
やつらに恥などない
怒れ
313デフォルトの名無しさん (ワッチョイ 9a6f-vOdE)
2017/09/13(水) 21:56:29.09ID:dVC5ajCT0 マ板でやれ
314デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)
2017/09/13(水) 22:36:54.70ID:cFJcbLHs0 >>312
俺は金持ちじゃねえ
単年度で8桁いっても次年以後で気を抜けばボコボコだ
一生遊んで暮らせる金があるやつにしか子供を作らせないなんて国策はねえ
童貞がイソップの葡萄こいてろ、こちとら稼いでみせると必死こいてんだ
俺は金持ちじゃねえ
単年度で8桁いっても次年以後で気を抜けばボコボコだ
一生遊んで暮らせる金があるやつにしか子供を作らせないなんて国策はねえ
童貞がイソップの葡萄こいてろ、こちとら稼いでみせると必死こいてんだ
315デフォルトの名無しさん (ワッチョイ 17e3-x/0H)
2017/09/13(水) 23:29:23.30ID:ruF3Cq7F0 ポッキリと折れて周囲に生暖かい目で見られるところまで見えた
316デフォルトの名無しさん (ワッチョイ d3f7-sU5l)
2017/09/14(木) 17:55:25.19ID:r9C1TnUx0 まんこ
317デフォルトの名無しさん (ワッチョイ 6123-pAdv)
2017/09/14(木) 21:35:54.73ID:Ng+6QcSm0 >>299
3桁って、10進数だと999円が限界だぞ
3桁って、10進数だと999円が限界だぞ
318デフォルトの名無しさん (ワッチョイ 5100-+ReX)
2017/09/14(木) 22:14:40.48ID:vjSz//mI0319デフォルトの名無しさん (ワッチョイ 016f-Yr6p)
2017/09/14(木) 23:45:34.67ID:lhu0Z/PJ0 ジンバブエドルで3桁か?
320デフォルトの名無しさん (ワッチョイ 39c2-o7xi)
2017/09/15(金) 11:30:59.37ID:EItFo4370 >>317
頭いいなおまえ
頭いいなおまえ
321デフォルトの名無しさん (ササクッテロリ Sp4d-Kd6g)
2017/09/19(火) 16:22:54.12ID:SXimL5kTp 昔"c言語をダイエットさせる本"みたいなタイトルの本読んだと思うんだが分かるやついる?
見つからなくて探してる
見つからなくて探してる
322デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/21(木) 20:42:10.28ID:x8dEnzes0 for(;~scanf("%d",&a);)とかwhile(~scanf("%d", &a))とかで~がないだけで永遠に入力ループするんだけど
~ってなにを宣言してるんだ教えてくれ
~ってなにを宣言してるんだ教えてくれ
323デフォルトの名無しさん (ワッチョイ 8300-Dc1X)
2017/09/21(木) 20:48:43.32ID:BDILGhdI0 ~はビット単位のNOT演算子じゃないの?
324デフォルトの名無しさん (ワッチョイ 9f2c-9/67)
2017/09/21(木) 21:03:53.86ID:N1EOCCyb0 ~なしでよくね?
325デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/21(木) 21:23:35.16ID:kYTPFpbC0 本来なら 変数a に格納されるまでループしたい意図だろうけど・・・・・
scanf の戻り値は 代入操作できた変数の数で
0 だと入力のフォーマットに合致しなかったわけなんだが (ここまでは素直)
一旦 その状態になると、次に正しく入力しても拾ってくれない scanf 独特の挙動があって
正しく入力しようが 0 のままというkuso
件の場合
最初の入力で数値ではない o を与えると (%d で受けれないので失敗)
次のループの入力で 1 を与えても やはり変数に格納ざれずに失敗したまま
これがあるので scanf は使うな、と良く言われてる所以
scanf の戻り値は 代入操作できた変数の数で
0 だと入力のフォーマットに合致しなかったわけなんだが (ここまでは素直)
一旦 その状態になると、次に正しく入力しても拾ってくれない scanf 独特の挙動があって
正しく入力しようが 0 のままというkuso
件の場合
最初の入力で数値ではない o を与えると (%d で受けれないので失敗)
次のループの入力で 1 を与えても やはり変数に格納ざれずに失敗したまま
これがあるので scanf は使うな、と良く言われてる所以
326デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/21(木) 21:54:22.20ID:x8dEnzes0 一行読み込みで同じ処理を数値なくなるまでしたいんだけどどう読み込んだ方がいい?
327デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/21(木) 22:19:34.61ID:kYTPFpbC0 fgets で行単位で読み込み
その行バッファに対して sscanf で変数に拾い上げするなり、11文字ずずつ字句解析するなり
char buf[512];
int a;
while (fgets(buf, 512, stdin)) {
/* 1行読んだよ */
if (sscanf(buf, "%d", &a) != 1) {
/* 数値じゃないのが来たのは無視する */
continue;
}
/* a に値が格納されたよ */
:
}
その行バッファに対して sscanf で変数に拾い上げするなり、11文字ずずつ字句解析するなり
char buf[512];
int a;
while (fgets(buf, 512, stdin)) {
/* 1行読んだよ */
if (sscanf(buf, "%d", &a) != 1) {
/* 数値じゃないのが来たのは無視する */
continue;
}
/* a に値が格納されたよ */
:
}
328デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/21(木) 22:26:26.69ID:kYTPFpbC0 日本語でおけ
× 11文字ずずつ字句解析するなり
○ 1文字づつ字句解析するなり
× 11文字ずずつ字句解析するなり
○ 1文字づつ字句解析するなり
329デフォルトの名無しさん (ワッチョイ 2e32-toYf)
2017/09/21(木) 23:44:09.55ID:Xpxn9Za50 >>327
strtolとかstrspn?系つかったほうがよくね?
strtolとかstrspn?系つかったほうがよくね?
330デフォルトの名無しさん (ワッチョイ 9f2c-9/67)
2017/09/22(金) 00:16:23.70ID:zbqUBjYs0331デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/22(金) 01:03:58.95ID:IvB4cJv30332デフォルトの名無しさん (ワッチョイ eb6f-9dtB)
2017/09/22(金) 01:11:24.08ID:exEqzPdX0333デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/22(金) 01:39:40.49ID:BRiVyzo00 forの継続条件がどう動いてるのかわからないな読み込めた時はループして読み込めなかったときはループ抜けるってのがどう判定されてるのか見えないな
334デフォルトの名無しさん (ワッチョイ eb6f-9dtB)
2017/09/22(金) 02:12:21.25ID:exEqzPdX0335デフォルトの名無しさん (ワッチョイ 1ee3-Dc1X)
2017/09/22(金) 02:35:57.85ID:dUE2o1PV0 もっとシンプルに使える入力関数を
誰かが作ってくれれば良いのに
誰かが作ってくれれば良いのに
336デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/22(金) 03:10:18.60ID:IvB4cJv30 >>335
簡単なので多分もう世界中に山ほどあると思うが、標準化されてないだけだろうな。
簡単なので多分もう世界中に山ほどあると思うが、標準化されてないだけだろうな。
337デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/22(金) 05:10:39.06ID:BRiVyzo00 while((a=Console.ReadLine())!=null)こうゆうので入力がなかったら終了するって簡単にできればC言語も楽なんだけどな
338デフォルトの名無しさん (ワッチョイ de1c-iatd)
2017/09/22(金) 14:57:26.19ID:8MJCwgYc0 int *get_int(int *dst, jmp_buf err)
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・
339デフォルトの名無しさん (ワッチョイ 06aa-73Ld)
2017/09/22(金) 20:47:03.45ID:dtN6vQMf0 >>334
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?
340デフォルトの名無しさん (ワッチョイ 3b23-Iax1)
2017/09/22(金) 22:06:16.56ID:IvB4cJv30 チルダ付けたのは失敗した時に-1が返されると思ったからかな?
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。
341デフォルトの名無しさん (ワッチョイ 8300-Dc1X)
2017/09/22(金) 22:16:43.87ID:JX9ZYj2p0 組込み以外で~使ってんの初めて見た
342デフォルトの名無しさん (ワッチョイ 8300-pgy8)
2017/09/22(金) 22:21:06.44ID:FtjqsiSd0 普通にビット処理だと使うよね
ビット処理なんかしないって?
ビット処理なんかしないって?
343334 (ワッチョイ eb6f-9dtB)
2017/09/22(金) 22:25:08.34ID:exEqzPdX0 ごめんウソ書いたわ
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい
>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい
>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね
345デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 07:38:02.97ID:9QRg4G5c0346デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/23(土) 11:43:39.39ID:8bsZ0VcP0347デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 14:50:28.05ID:IblrvTVf0 Win32環境なのですが
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?
348デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 15:16:24.27ID:PasvkTo90 具体的なコードもなく原因を聞かれても、どうしようもないと思うぞ
VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな
VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな
349片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 15:34:39.04ID:oO/4QkxId >>347
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。
350デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 16:05:08.45ID:IblrvTVf0 >>348-349
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{
…
} catch (...) {
…
}
}
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{
…
} catch (...) {
…
}
}
351片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:06:48.32ID:oO/4QkxId スタックを破壊してる可能性
352片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:07:30.45ID:oO/4QkxId 呼び出し規約が間違い
353デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 16:14:51.44ID:IblrvTVf0354片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:23:43.62ID:oO/4QkxId https://msdn.microsoft.com/ja-jp/library/kdzttdcb.aspx
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。
355片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:28:26.72ID:oO/4QkxId 配列の添字がオーバーしてないか?
356片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)
2017/09/23(土) 16:50:48.86ID:oO/4QkxId ideone.com に貼れ
357デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 19:47:03.99ID:IblrvTVf0 >>356
もう少し深く調べてみます!ありがとうございます!
もう少し深く調べてみます!ありがとうございます!
358デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 21:54:35.77ID:IblrvTVf0 >>356
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……
359デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 22:09:28.20ID:9QRg4G5c0 排他制御の問題ではなく
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン
int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }
a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン
int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }
a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ
360デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 22:20:31.54ID:IblrvTVf0361デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 22:28:00.05ID:9QRg4G5c0 volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
362デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 22:50:44.07ID:IblrvTVf0363デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 22:58:35.90ID:PasvkTo90 何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな
まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな
まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
364デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/23(土) 23:10:54.21ID:Z1NsXN0c0 >>358
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?
つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?
つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
365デフォルトの名無しさん (ワッチョイ 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では直らないはず。
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
> つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
> つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
> コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。
366デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/23(土) 23:22:23.90ID:PasvkTo90367デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:26:59.26ID:IblrvTVf0 >>361-365
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……
368デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:29:48.18ID:IblrvTVf0 こういう事ですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?
369デフォルトの名無しさん (ワッチョイ 8b11-hoCt)
2017/09/23(土) 23:33:50.34ID:9QRg4G5c0 書き込み時だけロックして 読み込み側のほうはロックせずに読み込んでる
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?
370デフォルトの名無しさん (ワッチョイ 3b23-Iax1)
2017/09/23(土) 23:49:15.83ID:8bsZ0VcP0 volatileにしてロックして読み書きするのが普通では?
371デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/23(土) 23:55:28.48ID:IblrvTVf0 >>369-370
volatileにして読み書きロックして厳密にやります!
volatileにして読み書きロックして厳密にやります!
372デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/23(土) 23:57:26.40ID:Z1NsXN0c0 >>368
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。
ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。
ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。
373デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 00:00:33.14ID:jg2xx4vD0 posixだとロックAPIにメモリ同期の効果があるから、普通はvolatileいらんけどな
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども
374デフォルトの名無しさん (スププ Sdaa-iJNy)
2017/09/24(日) 00:22:34.33ID:AOwUcJWDd375デフォルトの名無しさん (ワッチョイ 2b23-PvnN)
2017/09/24(日) 01:04:50.76ID:R8lp94JX0 >>374
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)
データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。
ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)
データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。
ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。
376デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 05:58:29.08ID:jg2xx4vD0 ロック中の読み出しが最適化で消えるなら、それはロックとコンパイラが腐ってる
377デフォルトの名無しさん (ドコグロ MMc2-gXon)
2017/09/24(日) 08:32:31.64ID:LX+6AD0qM378デフォルトの名無しさん (ドコグロ MMc2-gXon)
2017/09/24(日) 08:36:33.73ID:LX+6AD0qM379デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 10:21:22.00ID:jg2xx4vD0 はあ、そうですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか
380デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 10:22:36.14ID:gFeQddMX0 バカには使えないだけ
381デフォルトの名無しさん (ワッチョイ aaef-hoCt)
2017/09/24(日) 11:32:55.30ID:070pAcfa0 test
382デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)
2017/09/24(日) 13:57:54.86ID:c233uqnI0 腐っているのでしょう
383デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 14:40:58.49ID:jg2xx4vD0 メモリバリアを跨いでオブジェクトへのアクセス命令を最適化するとか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか
384デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 15:53:44.93ID:gFeQddMX0 CreateSection の使い方ぐらい調べてから書けばいいのに...
まあ他人事だしどうでもいいけど w
まあ他人事だしどうでもいいけど w
385デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 16:31:41.65ID:jg2xx4vD0 CriticalSectionの話のつもりだったんだけど、CreateSectionに変わったの?
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった
386デフォルトの名無しさん (ワッチョイ 8a11-gXon)
2017/09/24(日) 16:59:33.91ID:gFeQddMX0387デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)
2017/09/24(日) 17:30:54.77ID:jg2xx4vD0 >The following synchronization functions use the appropriate barriers to ensure memory ordering:
>Functions that enter or leave critical sections
>Functions that signal synchronization objects
>Wait functions
>Interlocked functions
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx
調べたけどCriticalSectionだけで十分そうだよ
Internallockedとかのほうが手軽そうだけどね
>Functions that enter or leave critical sections
>Functions that signal synchronization objects
>Wait functions
>Interlocked functions
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx
調べたけどCriticalSectionだけで十分そうだよ
Internallockedとかのほうが手軽そうだけどね
388デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)
2017/09/25(月) 02:44:46.68ID:glvYaQMb0 https://teratail.com/questions/39986
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【27歳会社員】「自慰行為に使うために」コインランドリーの乾燥機から24歳女性の下着など計11点(時価8万2080円相当)盗んだ疑い [nita★]
