マルチスレッドプログラミングについて語るスレ
■前スレ
マルチスレッドプログラミング相談室 その8
http://toro.2ch.net/test/read.cgi/tech/1253521167/
■過去スレ
その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html
その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/
その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/
その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/
その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/
その7 ttp://pc12.2ch.net/test/read.cgi/tech/1215253576/
OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ
【OS】
【言語】
【実行環境】
【その他特記する事項】
マルチスレッドプログラミング相談室 その9
2012/06/15(金) 01:31:57.88
2012/06/16(土) 21:17:30.95
18デフォルトの名無しさん
2012/06/16(土) 22:25:28.46194
2012/06/16(土) 23:07:53.93 申し訳ありません,並列化ですが,解決しました.
/Qpar-threshold(並列化のしきい値)の値を100から20ぐらいまで下げたら5スレッドで実行されました.
ただ,ものすごく,計算が遅くなってしまって,なおかつ不必要なところまで並列化されてしまったようです.
このループだけ並列化したいっていうような指定ってできるのでしょうか?
/Qpar-threshold(並列化のしきい値)の値を100から20ぐらいまで下げたら5スレッドで実行されました.
ただ,ものすごく,計算が遅くなってしまって,なおかつ不必要なところまで並列化されてしまったようです.
このループだけ並列化したいっていうような指定ってできるのでしょうか?
2012/06/16(土) 23:18:15.13
2012/06/17(日) 02:24:44.41
答え教えてもらって、闇雲にやるのが今風なの?
2012/06/17(日) 02:28:46.34
それって、単純ループがスレッド化されただけじゃねえの?
2012/06/17(日) 03:56:01.16
実行環境に寄って自動で最適化して欲しいよね。
ちょっと違うけどjitみたいに自分でプロファイルとって実行処理罹る所を重点的に最適化とかさ。
4coreの環境と64coreの環境といちいち最適化するのめんどくさい。
ちょっと違うけどjitみたいに自分でプロファイルとって実行処理罹る所を重点的に最適化とかさ。
4coreの環境と64coreの環境といちいち最適化するのめんどくさい。
2012/06/17(日) 04:08:44.71
core数増えたから、早くなるってわけでもないでしょうに
2012/06/17(日) 06:28:14.10
効率が悪かろうと並列化したいループには !DEC$ PARALLEL ALWAYS
※ 依存性に目をつぶれという指示ではない
> 64core の対応
3日かかる計算を1時間に押し込みたいなら、やる価値はある。
1分の処理が1秒になることを期待するなら、最適化する時間のほうが長い。
そもそも、大体の 64core での性能問題は 4core では小さくて見えないだけ。
スケールするとかしないとかはそういう話。
※ 依存性に目をつぶれという指示ではない
> 64core の対応
3日かかる計算を1時間に押し込みたいなら、やる価値はある。
1分の処理が1秒になることを期待するなら、最適化する時間のほうが長い。
そもそも、大体の 64core での性能問題は 4core では小さくて見えないだけ。
スケールするとかしないとかはそういう話。
2012/06/17(日) 14:48:00.38
速くなってくれないと高額な多コア買った意味無いんだが。
2012/06/17(日) 19:02:58.50
それは、プログラム作ったベンダーに言え。
場合によっては、どれくらい高速化するかの見積もりくらい出してくれるだろ。
場合によっては、どれくらい高速化するかの見積もりくらい出してくれるだろ。
2012/06/17(日) 20:27:37.75
分散処理できるように考えるほうが難しいのに
道具によってはできることとできないことがあるでしょ
道具によってはできることとできないことがあるでしょ
29デフォルトの名無しさん
2012/07/06(金) 19:30:56.61 多コア化すれば、将来は、割込優先スレッド用コア、時分割スレッド用コア、OS用コアに別れて、それぞれのコアが空き時間でどうでもしてくれスレッドを処理するようになる気がする。
そうしないとスケジューリングに費やすコストが無駄だ。
そうしないとスケジューリングに費やすコストが無駄だ。
2012/07/06(金) 19:38:42.21
あまり賢そうに見えないな
31デフォルトの名無しさん
2012/07/06(金) 19:45:56.15 gpuが標準的になった時点で、非対称プログラミングが当たり前になるから、コア間に使い分け、役割分担が発生するのは必然じゃないかな。もっともどのコアがどの役割をやるかは、スケジューラが決めることになるけど。
2012/07/06(金) 19:58:44.83
標準的な入出力は動くコア決めたほうがいいかもしれんけど
プロセス、スレッドはどのコアで動こうが関係無いような
どうせ、暇な?コアに割り当てられるだろうから
プロセス、スレッドはどのコアで動こうが関係無いような
どうせ、暇な?コアに割り当てられるだろうから
2012/07/06(金) 20:28:22.95
linuxだとこういう指定が出来るようだ
ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sched_setaffinity.2.html
ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sched_setaffinity.2.html
2012/07/06(金) 22:01:45.18
それぐらいは WindowsNT 4.0 からあるが。
SetProcessAffinityMask
http://msdn.microsoft.com/ja-jp/library/cc429334.aspx
SetProcessAffinityMask
http://msdn.microsoft.com/ja-jp/library/cc429334.aspx
2012/07/06(金) 22:04:26.89
コア数とかうるさい割にapiのことは言わんのね?
36デフォルトの名無しさん
2012/07/21(土) 14:53:22.69 pスレッドについて教えてください。
関係性のない処理を行う2つのスレッドA、Bを同時に動かし始めたいのですが、
・スレッドAの待ち状態にpthread_cond_wait(&cond, &mutex1);
・スレッドBの待ち状態にpthread_cond_wait(&cond, &mutex2);
として(condは同じで、mutexが異なる)、これらを動かし始めるために別スレッドで
pthread_cond_broadcast(&cond);
をコールしたのですが、思ったとおりに動いてくれません。
なにがいけないのでしょう?
(pthread_cond_wait()の使い方を間違えている?)
関係性のない処理を行う2つのスレッドA、Bを同時に動かし始めたいのですが、
・スレッドAの待ち状態にpthread_cond_wait(&cond, &mutex1);
・スレッドBの待ち状態にpthread_cond_wait(&cond, &mutex2);
として(condは同じで、mutexが異なる)、これらを動かし始めるために別スレッドで
pthread_cond_broadcast(&cond);
をコールしたのですが、思ったとおりに動いてくれません。
なにがいけないのでしょう?
(pthread_cond_wait()の使い方を間違えている?)
2012/07/21(土) 14:57:02.99
馬鹿には無理
2012/07/21(土) 15:18:21.14
>>36
broadcast を受ける側のスレッドは、 broadcast するときに wait していなければいけない
broadcast したときに wait しているスレッドがいなければ、無駄撃ちになる
通常 cond が mutex と一緒に使われるのは、ターゲットが wait に入る一瞬前に broadcast を撃って運悪く外れたりするような事態を回避し、確実に当たるようにするため
思ったとおりに動いてくれないというのなら、あなたの使い方には何か誤りがあって、そういった問題を防ぎ切れていないのだろう
broadcast を受ける側のスレッドは、 broadcast するときに wait していなければいけない
broadcast したときに wait しているスレッドがいなければ、無駄撃ちになる
通常 cond が mutex と一緒に使われるのは、ターゲットが wait に入る一瞬前に broadcast を撃って運悪く外れたりするような事態を回避し、確実に当たるようにするため
思ったとおりに動いてくれないというのなら、あなたの使い方には何か誤りがあって、そういった問題を防ぎ切れていないのだろう
39デフォルトの名無しさん
2012/07/21(土) 15:33:58.32 >>38
素朴に待っていると思っていたスレッドが、実は待っていないせいで
シグナルがすり抜けていたということですね
このての、「関数を素朴に並べただけでは思いどおりに動作しない」問題の対応方法には
それぞれに決まった「お作法」「イディオム」がありそうな気がしますが、どうなんでしょう?
ともかく、ありがとうございました
素朴に待っていると思っていたスレッドが、実は待っていないせいで
シグナルがすり抜けていたということですね
このての、「関数を素朴に並べただけでは思いどおりに動作しない」問題の対応方法には
それぞれに決まった「お作法」「イディオム」がありそうな気がしますが、どうなんでしょう?
ともかく、ありがとうございました
2012/07/21(土) 15:42:20.05
2012/07/21(土) 15:49:59.71
>>40
頭で考えたアルゴリズムを実験するときに「安全装置」を省略したせいで
かんたんなこーどなのにはまるなんてありそうですね・・・・
自分が使いたい本番コードは、各スレッドの処理に十分なマスがあるので
素朴なつくりでもそれなりに動いたかもしれませんが、
再現性のないトラブルが発生する前にそういう問題を認識できてよかったです
ありがとうございました
頭で考えたアルゴリズムを実験するときに「安全装置」を省略したせいで
かんたんなこーどなのにはまるなんてありそうですね・・・・
自分が使いたい本番コードは、各スレッドの処理に十分なマスがあるので
素朴なつくりでもそれなりに動いたかもしれませんが、
再現性のないトラブルが発生する前にそういう問題を認識できてよかったです
ありがとうございました
2012/07/21(土) 16:06:39.87
>>41
去年の暮れ辺りに悩んでいたのが、mutexでスレッドプールを管理していたツールなんだよね。
mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
自分が待たずにロックしちゃうことに。
メインスレッドでmutex_unlock(); mutex_lock()のように書いているのにunlockしたあと
lockするところまで実行できないなんてちょっと想像しにくいぞ。
# 詳細不明だけど、unlockした時点でプールスレッドがスケジュールされてメインスレッドがスケジュールからはずされるっぽい。
去年の暮れ辺りに悩んでいたのが、mutexでスレッドプールを管理していたツールなんだよね。
mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
自分が待たずにロックしちゃうことに。
メインスレッドでmutex_unlock(); mutex_lock()のように書いているのにunlockしたあと
lockするところまで実行できないなんてちょっと想像しにくいぞ。
# 詳細不明だけど、unlockした時点でプールスレッドがスケジュールされてメインスレッドがスケジュールからはずされるっぽい。
2012/08/25(土) 18:20:47.36
いつでもどんな時にでも
スケジュールから外されても動かされても
大丈夫なように作るのが鉄則
スケジュールから外されても動かされても
大丈夫なように作るのが鉄則
2012/08/26(日) 08:54:03.71
そうそう。
だから、Web上のサンプルは当てにならない。
だから、Web上のサンプルは当てにならない。
2012/08/26(日) 09:32:08.49
そもそも並列化したいのは高速に処理したいからじゃん?
サンプルにかならずあるsleep()を消すと、途端にまともに動かなくなる
まともに動かなくなるならまだいいけど、「ときどき動作がおかしい」これ最悪
サンプルにかならずあるsleep()を消すと、途端にまともに動かなくなる
まともに動かなくなるならまだいいけど、「ときどき動作がおかしい」これ最悪
2012/08/26(日) 09:34:18.81
て言うかサンプルってそういうもんだし。
そもそも >>42 が
> mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
> 自分が待たずにロックしちゃうことに。
って書いてるけど、それ以外にどんな動作を期待してるのか、よくよわからん。
そもそも >>42 が
> mutexは相手がロックしていれば待つけど、相手がスケジュールはずされてロックしてくれていないと
> 自分が待たずにロックしちゃうことに。
って書いてるけど、それ以外にどんな動作を期待してるのか、よくよわからん。
2012/08/26(日) 09:57:42.57
マトが止まっていないとシグナルがすり抜けちゃうなんて最初はわかんないでしょ
そんなことより、マトがトマるだって・・・・・!喜w
そんなことより、マトがトマるだって・・・・・!喜w
2012/09/01(土) 15:54:33.37
ダレモイナイ・・・・・・ダジャレオソルベシ・・・・・
素朴なQなんですが、マルチCPUのマシンで、
@ひとつのプロセスに属するスレッドは、全部同じCPU(プロセスがいる)で動く
Aひとつひとつのスレッドが独立してCPUを渡り歩いているように見えるのは、
スレッド単体ではなく、それの属するプロセスが渡り歩いているため
こういう理解は正しいですか?
素朴なQなんですが、マルチCPUのマシンで、
@ひとつのプロセスに属するスレッドは、全部同じCPU(プロセスがいる)で動く
Aひとつひとつのスレッドが独立してCPUを渡り歩いているように見えるのは、
スレッド単体ではなく、それの属するプロセスが渡り歩いているため
こういう理解は正しいですか?
2012/09/01(土) 15:58:04.54
スレッドの割り当てとかはOSが決めてることだからね
OSの挙動に影響しないようなことを考えながらやりませう
マルチCPUじゃなく
単一CPUの時のスレッド等の挙動を考えてみませう
OSの挙動に影響しないようなことを考えながらやりませう
マルチCPUじゃなく
単一CPUの時のスレッド等の挙動を考えてみませう
2012/09/01(土) 16:04:51.98
同じプロセッサ内のコアを移動するならまだしも、別のプロセッサに移動してしまったら、
せっかく溜め込んだキャッシュがおじゃんになってしまうのではないでしょうか?
せっかく溜め込んだキャッシュがおじゃんになってしまうのではないでしょうか?
2012/09/01(土) 16:11:29.80
逝ってるなマルチコアはCPU毎に命令データキャッシュ持ってるでしょ
2012/09/01(土) 16:12:43.77
でも分岐したらダメなのでは?
2012/09/01(土) 16:16:42.15
よく考えたら、分岐するんだったらCPU移らなくてもダメだった
ドピュッ
ドピュッ
2012/09/01(土) 16:27:35.25
命令の先読みとかやってるの知ってる?
同じ領域を読み込む場合に早くなるってのがキャッシなのでは?
HDDキャッシュとかも同じでしょ
同じ領域を読み込む場合に早くなるってのがキャッシなのでは?
HDDキャッシュとかも同じでしょ
2012/09/01(土) 16:29:03.73
別のプロセッサに移動してしまったらキャッシュとかおじゃんになってしまうかもしれないが、
ひとつのプロセッサに多数のスレッドが集中して別のプロセッサを遊ばせておくくらいならいくつかのスレッドを移した方がいい場合もある
OSの裁量次第
ひとつのプロセッサに多数のスレッドが集中して別のプロセッサを遊ばせておくくらいならいくつかのスレッドを移した方がいい場合もある
OSの裁量次第
2012/09/01(土) 16:32:16.93
キャッシュ知らんでも
スレッド系のプログラム作るのには関係無いような
速度ウンタラは動いてから考えればいい話でしょ
スレッド系のプログラム作るのには関係無いような
速度ウンタラは動いてから考えればいい話でしょ
2012/09/05(水) 01:11:52.99
初心者の質問です
new;した領域 p があって
スレッドAは条件によってdelete p;をする
スレッドBはpを参照する
この時に
変数 blReference, blDeletingを使って
Aの処理中 delete部分
while( blReference ){ Sleep(1); }
blDeleting= true;
delete p;
p = NULL;
blDeleting = false;
Bの処理中 参照部分
while( blDeleting ){ Sleep(1); }
blReference = true;
char* cp = (char*)p:
//以下参照
blReference = false;
っていうのは安全でしょうか?
new;した領域 p があって
スレッドAは条件によってdelete p;をする
スレッドBはpを参照する
この時に
変数 blReference, blDeletingを使って
Aの処理中 delete部分
while( blReference ){ Sleep(1); }
blDeleting= true;
delete p;
p = NULL;
blDeleting = false;
Bの処理中 参照部分
while( blDeleting ){ Sleep(1); }
blReference = true;
char* cp = (char*)p:
//以下参照
blReference = false;
っていうのは安全でしょうか?
2012/09/05(水) 04:17:50.83
>>57
先ず基本的にblReference, blDeletingとも、きちんと扱えるようにしないとダメ。
要は、OSの用意しているクリティカルセクションなどの機構を使う必要がある。
つーか、マルチスレッドプログラミングの基本なんだが、大丈夫なんか?
それと、cpにNULLが代入されること自体は問題ないの?
先ず基本的にblReference, blDeletingとも、きちんと扱えるようにしないとダメ。
要は、OSの用意しているクリティカルセクションなどの機構を使う必要がある。
つーか、マルチスレッドプログラミングの基本なんだが、大丈夫なんか?
それと、cpにNULLが代入されること自体は問題ないの?
2012/09/05(水) 06:16:48.24
weak_ptr使えハゲと言うしかないレベル
2012/09/05(水) 08:13:29.83
weak_ptrってboost?
マルチスレッドを考慮されていたの?
マルチスレッドを考慮されていたの?
2012/09/09(日) 01:13:55.50
2012/09/09(日) 01:44:44.97
volatile使ったとしてもコンパイラによっては安全だとは言えないんだよ
2012/09/09(日) 01:51:51.18
安全って、思いたい理由の方に興味があるんだけど
2012/09/09(日) 07:41:49.96
むしろ安全だといえるコンパイラを知りたい
2012/09/09(日) 14:24:32.10
volatile使っても結果変わらない事の方が多い気がする
2012/09/09(日) 15:54:34.19
そりゃそうだ
2012/09/09(日) 16:30:00.96
安全だと思うと、コンピュータがそれを理解して動いてくれると思いたいのかな
2012/09/12(水) 00:03:54.96
volatileしてダメだったケースに遭遇したことないなあ。
まあboolでの同期・排他は簡単なケースにしか使ってなくて、
まじめなのはcritical sectionとかmutexで排他・同期するから
気がついてないだけかもしれないけど。
まあboolでの同期・排他は簡単なケースにしか使ってなくて、
まじめなのはcritical sectionとかmutexで排他・同期するから
気がついてないだけかもしれないけど。
2012/09/12(水) 07:22:51.47
>>57
>// スレッドA
>while( blReference ){ Sleep(1); } // 1
>blDeleting= true; // 3
>// スレッドB
>while( blDeleting ){ Sleep(1); } // 2
>blReference = true; // 4
スレッドの処理が時間的に番号の順で行われる場合がある。
つまり、この処理はスレッド間の排他にはなっていない。
おとなしくクリティカルセクションを使ってロックした方がいい。
>// スレッドA
>while( blReference ){ Sleep(1); } // 1
>blDeleting= true; // 3
>// スレッドB
>while( blDeleting ){ Sleep(1); } // 2
>blReference = true; // 4
スレッドの処理が時間的に番号の順で行われる場合がある。
つまり、この処理はスレッド間の排他にはなっていない。
おとなしくクリティカルセクションを使ってロックした方がいい。
2012/09/22(土) 01:53:58.20
>>69
InterlockedExchangePointerは?
InterlockedExchangePointerは?
2012/09/29(土) 20:38:32.52
質問ですが、Windows APIのSetEvent()やWaitForSingleObject()って、
内部で適切にメモリバリアを行うことが保証されていますか?
例えば、下記のケースにおいて、_WriteBarrier()や_ReadBarrier()は冗長?
(メインスレッド側)
bTerminate = true; // volatile bool型
_WriteBarrier();
SetEvent(hEvent); // スレッドを起床させる
(ワーカースレッド側)
WaitForSingleObject(hEvent); // 起床されるまで待つ
_ReadBarrier();
if (bTerminate) { .... } // メインスレッドから通知されたbTerminateに基づく処理
内部で適切にメモリバリアを行うことが保証されていますか?
例えば、下記のケースにおいて、_WriteBarrier()や_ReadBarrier()は冗長?
(メインスレッド側)
bTerminate = true; // volatile bool型
_WriteBarrier();
SetEvent(hEvent); // スレッドを起床させる
(ワーカースレッド側)
WaitForSingleObject(hEvent); // 起床されるまで待つ
_ReadBarrier();
if (bTerminate) { .... } // メインスレッドから通知されたbTerminateに基づく処理
2012/09/29(土) 20:49:37.13
も一個、volatile bool a, b; があるとして、
a = c;
b = d;
の代入順序は、a, bがたとえatomicな型でvolatileだからといって
プロセッサのアウトオブオーダー実行のレベルでは実施される順序が保たれる保証はない、
よって、上記代入を行ったコア以外のコアからaやbを代入順序依存で参照する場合は
メモリバリアが 必 須 、
という理解で合っていますか
a = c;
b = d;
の代入順序は、a, bがたとえatomicな型でvolatileだからといって
プロセッサのアウトオブオーダー実行のレベルでは実施される順序が保たれる保証はない、
よって、上記代入を行ったコア以外のコアからaやbを代入順序依存で参照する場合は
メモリバリアが 必 須 、
という理解で合っていますか
2012/09/29(土) 21:08:56.80
>>71
http://msdn.microsoft.com/en-us/library/ms686355%28VS.85%29.aspx
> 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
>>72
はい
http://msdn.microsoft.com/en-us/library/ms686355%28VS.85%29.aspx
> 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
>>72
はい
2012/09/30(日) 00:03:39.72
>>64
javacやcscじゃね
javacやcscじゃね
2012/09/30(日) 00:12:53.41
メモリバリアってのはgcc特有の表現で
atomicな処理とは関係ないんだけど
atomicな処理とは関係ないんだけど
2012/09/30(日) 00:30:58.05
2012/09/30(日) 00:56:39.75
ただの最適化抑止のおまじないみたいなもんだよ
2012/09/30(日) 01:05:56.81
>>77
ちょっそれvolatileの方wwwww
まあ>73の通り、Windows API内部でよろしくやってくれるので普通はメモリバリアの方は意識しなくて良いっぽい
おそらくUNIXのシステムコールも同様でよろしくやってくれるから知る人ぞ知る知識になってしまうのだろう…
ちょっそれvolatileの方wwwww
まあ>73の通り、Windows API内部でよろしくやってくれるので普通はメモリバリアの方は意識しなくて良いっぽい
おそらくUNIXのシステムコールも同様でよろしくやってくれるから知る人ぞ知る知識になってしまうのだろう…
79デフォルトの名無しさん
2012/09/30(日) 01:13:58.152012/09/30(日) 01:14:33.03
gccのvolatileってのは、ちょっと特殊なんだよ
2012/09/30(日) 01:21:19.22
>>77,78
真相はもっと複雑怪奇だったりする
http://yamasa.hatenablog.jp/entries/2009/07/20
http://msdn.microsoft.com/ja-jp/library/bb310595%28VS.85%29.aspx
つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
真相はもっと複雑怪奇だったりする
http://yamasa.hatenablog.jp/entries/2009/07/20
http://msdn.microsoft.com/ja-jp/library/bb310595%28VS.85%29.aspx
つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
2012/09/30(日) 01:26:29.84
ここらへんの話は
・(インラインでない)関数呼び出しの副作用を恐れてコンパイラが最適化を自粛
・volatileによって明示的に最適化が抑制
・システムコール内でメモリバリアの面倒をみてくれる
・ハードウェアがコア間でキャッシュのコヒーレンスをとってくれる
といった事情が絡み合った結果、運よく問題を生じないケースも多々あるので
コードをバリバリ書いているような人でもきちんと理解していないことがある(あった)
・(インラインでない)関数呼び出しの副作用を恐れてコンパイラが最適化を自粛
・volatileによって明示的に最適化が抑制
・システムコール内でメモリバリアの面倒をみてくれる
・ハードウェアがコア間でキャッシュのコヒーレンスをとってくれる
といった事情が絡み合った結果、運よく問題を生じないケースも多々あるので
コードをバリバリ書いているような人でもきちんと理解していないことがある(あった)
2012/09/30(日) 01:27:48.80
アトミック変数とか作って、ド素人に誤解釈されたらどうすんだろ、この人
2012/09/30(日) 02:22:23.12
>>81
> つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
そこで面倒を見てくれるのは「release/aquireメモリバリアとしてのみ」であることに注意。
http://yamasa.hatenablog.jp/entry/20090816/1250446250
こっちのSequential consistencyの性質は、VC++2005以降のvolatileでも持っていない。
> つまり、VC++2005以降である限り、volatileを使うとメモリバリアも面倒をみてくれるらしい…
そこで面倒を見てくれるのは「release/aquireメモリバリアとしてのみ」であることに注意。
http://yamasa.hatenablog.jp/entry/20090816/1250446250
こっちのSequential consistencyの性質は、VC++2005以降のvolatileでも持っていない。
2012/09/30(日) 13:33:02.65
>>83
ドシロウトがなんでスレッド使った開発に加わるんだよ
ドシロウトがなんでスレッド使った開発に加わるんだよ
2012/09/30(日) 13:35:58.01
なんで排他の話ばっか出てくるんだ。
スレッド間で書き換えしまくるような変数なんて殆ど無いだろ。
それはともかく、C++向けのクロスプラとフォームなスレッドキューって無いものか。
スレッド間で書き換えしまくるような変数なんて殆ど無いだろ。
それはともかく、C++向けのクロスプラとフォームなスレッドキューって無いものか。
2012/09/30(日) 14:26:20.27
2012/09/30(日) 15:13:14.28
>>86
スレッドの実装が違うだろう、LinuxとUNIXなら同じだが
スレッドの実装が違うだろう、LinuxとUNIXなら同じだが
2012/09/30(日) 15:25:27.37
>>85
じゃあ、うわっつらの言葉だけ知ってる甘ちゃん系ではどう?
じゃあ、うわっつらの言葉だけ知ってる甘ちゃん系ではどう?
2012/09/30(日) 16:54:17.48
2012/09/30(日) 17:01:09.98
2012/09/30(日) 21:04:28.14
おまえら何回C++におけるatomicとvolatileの話を繰り返せば気がすむの
2012/09/30(日) 21:20:03.98
それしかネタがないからさ
2012/09/30(日) 22:09:45.89
>>92
スレッドキューの話しだせ
スレッドキューの話しだせ
2012/09/30(日) 23:24:16.01
だって手法なんて先駆者が出し尽くしただろ
2012/09/30(日) 23:53:26.29
スレッドキューって何だ?
スレッドセーフなキューってことか?
それともGCDみたいなタスクキューのことか?
スレッドセーフなキューってことか?
それともGCDみたいなタスクキューのことか?
2012/10/01(月) 00:06:38.53
タスクキューのことだよ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
てかスレッドセーフなキューってなんだよ。それだったら
別にキューに限定せずスレッドセーフなコンテナの話でいいだろ。
2012/10/01(月) 07:53:47.16
java.util.concurrent.BlockingQueueのことだろ
2012/10/12(金) 23:18:24.02
同期処理を間違いなく設計するための、何か良い手法やツールはないですかね?
ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています
ペーペーのビギナーだというのもあるのですが、
複数のmutexを混在させなければいけない時にぼんやり書いたコードでデッドロックを発生させたり、
waitに到達していないのにシグナル発射する可能性のあるコードを書いてしまって、
そのデバッグで無駄に体力を消耗しています
100デフォルトの名無しさん
2012/10/13(土) 11:18:48.75 馬鹿には無理
101デフォルトの名無しさん
2012/10/13(土) 13:05:32.66102デフォルトの名無しさん
2012/10/13(土) 18:57:49.84103デフォルトの名無しさん
2012/10/13(土) 22:12:39.46 >>101
やんないと、他に仕事ないんで・・・・
>>102
かなり頭がよくないと、サラリと正しいコード書けないですよね(棋士的な意味の頭のよさ)
そうか、地道にやるしかないのか(´・ω・`)
・・・売り物なんですねimagix
自分の担当業務以外にも使えそうなので、ちょっとチーム内に紹介してみます
とりあえず、今の自分のレベルでミスりやすいところを正しく実装するための比喩をいくつか考案中です
↓
例1
スレッド間同期は、キャッチボール
ボールを受け取る側は、しゃがんでいないとボールをキャッチできない
例2
スレッド再開時の手順は、競馬のスタートと同じ
@ゲートを閉じる(送信側mutexロック)
A馬がゲート前に並ぶ(受信側wait)
Bファンファーレが鳴る(signal)
Cゲートが開く(送信側mutex開放)
やんないと、他に仕事ないんで・・・・
>>102
かなり頭がよくないと、サラリと正しいコード書けないですよね(棋士的な意味の頭のよさ)
そうか、地道にやるしかないのか(´・ω・`)
・・・売り物なんですねimagix
自分の担当業務以外にも使えそうなので、ちょっとチーム内に紹介してみます
とりあえず、今の自分のレベルでミスりやすいところを正しく実装するための比喩をいくつか考案中です
↓
例1
スレッド間同期は、キャッチボール
ボールを受け取る側は、しゃがんでいないとボールをキャッチできない
例2
スレッド再開時の手順は、競馬のスタートと同じ
@ゲートを閉じる(送信側mutexロック)
A馬がゲート前に並ぶ(受信側wait)
Bファンファーレが鳴る(signal)
Cゲートが開く(送信側mutex開放)
104デフォルトの名無しさん
2012/10/13(土) 23:51:02.32 mutexなんか使わずfuture、promisで凌げ
105デフォルトの名無しさん
2012/10/14(日) 17:05:55.79106デフォルトの名無しさん
2012/10/14(日) 18:33:06.95 まず10年間C++を勉強しろ
107デフォルトの名無しさん
2012/10/14(日) 20:43:53.62 >>106
C++関係ないやん
C++関係ないやん
108デフォルトの名無しさん
2012/10/15(月) 01:03:58.39109デフォルトの名無しさん
2012/10/15(月) 09:17:51.40 結局無理てことか、初心者というより基本が
110デフォルトの名無しさん
2012/10/21(日) 14:23:48.88111デフォルトの名無しさん
2012/10/21(日) 14:42:59.60112デフォルトの名無しさん
2012/10/21(日) 23:06:50.68 Joel on softwareの和訳ページ『間違ったコードは間違って見えるようにする』
を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓
http://www.joelonsoftware.com/articles/Wrong.html
を紹介しようと思ったが今ちょっと繋がらないようなので原文で読んでちょ↓↓↓
http://www.joelonsoftware.com/articles/Wrong.html
113デフォルトの名無しさん
2012/10/26(金) 20:45:55.33 教えてください
g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の
効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
g++でコンパイルしたプログラムのプロファイリング、特にスレッドの動作の
効率を見たいのですが、Linux環境で使える定番のフリーツールはないでしょうか?
114デフォルトの名無しさん
2012/10/28(日) 11:59:56.78 gdb
115デフォルトの名無しさん
2012/10/28(日) 21:28:29.42 マ
ジ ハ ,,ハ
デ (;゚◇゚)z
!?
ジ ハ ,,ハ
デ (;゚◇゚)z
!?
116デフォルトの名無しさん
2012/12/05(水) 09:54:15.94 プロファイラでわかるのはどの部分が処理時間の何%を使ってるか
ぐらいであって、スレッドの動作効率なんていう個人の価値観みたい
なものは測定できんだろ。
ぐらいであって、スレッドの動作効率なんていう個人の価値観みたい
なものは測定できんだろ。
レスを投稿する
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市朗報】 日本政府「一昨年は1300億円。去年も防衛費が1100億円余ったw」 日本の防衛費は充分足りてる事が判明。増やす必要無し [485983549]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
