- 1 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:19:27 ]
- マルチスレッドプログラミングについて語るスレ
■前スレ マルチスレッドプログラミング相談室 その7 pc12.2ch.net/test/read.cgi/tech/1215253576/ ■過去スレ その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/ OS・言語・環境は問わないが、それゆえ明記すべし。 テンプレ 【OS】 【言語】 【実行環境】 【その他特記する事項】
- 301 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:10:17 ]
- >>298
同時に入ってる必要は無くね?
- 302 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:40:05 ]
-
両方とも、a→bの流れならトランザクションだけでよくないか?
- 303 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 00:40:47 ]
- スレッドがA、B、C、Dの4つあって
かならずA、B、C、Dの順番で仕事が 終わるようにするには どんなアルゴリズム使えばいいのですか?
- 304 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 00:46:46 ]
- スレッド化する意味あるのか?
B,C,Dは寝かせておいて、Aが自分の仕事を終えたときにBを起こせばいいんじゃないか
- 305 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:44:25 ]
- スレッドの終了処理を順番にやる必要があるってことかな。
終わるタイミングを調整したいだけなら、 BがAの終了を待つ CがBの終了を待つ DがCの終了を待つ って感じにやれば順番に終われるんじゃね?
- 306 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 18:28:33 ]
- そしてAがDの終了を待てば完璧
- 307 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 19:34:45 ]
- >>306
どうやって全部待てばいいの?
- 308 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 20:36:58 ]
- Eに管理してもらう
- 309 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 20:51:33 ]
- どうやるのか全然わからない
たすけて
- 310 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:14:37 ]
- Aの処理終了の際に2個のスレッドで破れるBarrier1を待つ
Bの処理開始の際に2個のスレッドに破れるBarrier1を待つ Bの処理終了の際に2個のスレッドに破れるBarrier2を待つ Cの処理開始の際に2個のスレッドに破れるBarrier2を待つ Cの処理終了の際に2個のスレッドに破れるBarrier3を待つ Dの処理開始の際に2個のスレッドに破れるBarrier3を待つ
- 311 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:16:11 ]
- >>310
>スレッドで破れるBarrier こんなことすると破綻すると思うのですが それは何か新しい概念なのでしょうか?
- 312 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:46:53 ]
- >>311
>>294のバリアのことだよ。 2個のスレッドがバリアに到達した瞬間にバリアが破れて同時に進行を再開する。 Wikipediaより… 並列コンピューティングにおけるバリア(英: Barrier)とは、同期方法の一つであり、 ソースコード中でスレッドやプロセスがある箇所で停止し、 他の全てのスレッドプロセスがバリアに到達するまで進行しないようなものを示す。
- 313 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:29:35 ]
- >>310
わかりにくい表現だな。
- 314 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 21:28:39 ]
- 同期なり待機って言った方がわかりやすいな
- 315 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:13:07 ]
- 追加削除順序を保持しつつ
効率的にアクセス可能なデータ構造って何があるの?
- 316 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:25:04 ]
- 二分木
- 317 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:32:33 ]
- >>316
マルチスレッドの2分木のサンプル 教えて
- 318 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 00:50:06 ]
- >>315
Skip list. 実装例は java.util.concurrent.ConcurrentSkipListSet とかかな。
- 319 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 11:14:34 ]
- C++のマルチスレッドの本って
どんなのがありますか? Intelの本は使い方しか書いてないで 困ってる
- 320 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:39:32 ]
- 正直、使い方だけしか提示しようがない気がする
どこもかしこも開拓中で、定番というものが無い
- 321 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:06:11 ]
- >>319
Java並行処理プログラミングマジオススメ。 直接同じことは出来なくても、考え方は大いに参考になる。 volatileだけはC++と全くの別物なので注意だけど。 boost.threadのfutureでJavaのExecutorフレームワークに近いことが出来そうだなぁ。
- 322 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:16:04 ]
- >>321
その程度の書籍薦められても困るんだよ もっとまともな本持って来い
- 323 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:29:39 ]
- >>322
Java並行処理プログラミングでも満足できない貴方には ↓がお勧め。 scholar.google.com/ 最先端の研究成果が大量に手に入るぞ。
- 324 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 19:01:28 ]
- >>322
もっとまともな本があるなら俺も知りたいけどね。
- 325 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 23:35:25 ]
- 並行コンピューティング技法――実践マルチコア/マルチスレッドプログラミング
ttp://www.oreilly.co.jp/books/9784873114354/
- 326 名前:デフォルトの名無しさん [2010/02/22(月) 16:37:56 ]
- begintreadexを使ったときはclosehandleを使わないといけないらしいけど
CloseHandle((HANDLE)_beginthreadex()); こんな感じでいいの?
- 327 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 16:42:48 ]
- beginthreadexが返したハンドルを渡すのかと聞いているのならYES
- 328 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 17:44:29 ]
- _beginthreadexはなんで整数型で返すんだろう
- 329 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:11:07 ]
- Win32の型を持ち込みたくなかったからじゃないの。
- 330 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 00:27:00 ]
- 意味も無く汚くはしないしな、いくらMSでも
- 331 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 00:29:08 ]
- void *じゃだめなのか
- 332 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 08:52:12 ]
- それだと32bitであることを強調できないからやめたんじゃないかな
- 333 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 14:32:40 ]
- 一応今はuintptr_tだしな
まぁ毎度のレガシーの枷なんだろうし、仕方ないっつーか正直どうでもいい
- 334 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:36:02 ]
- どちらかというとマルチコア絡みの質問ですが
テンプレにある該当スレは過疎ってるぽいのでこちらで質問させていただきます Q1. Windowsはスレッドコンテキスト切替時、汎用レジスタ同様にxmmレジスタを待避/復帰しますか? 主にWindows 7 (32 bit)とWindows 7(64 bit)について知りたいですが、他のも回答いただけると有難いです Q2. そもそもCore i7のSIMDモジュールってコア毎に独立してますか? 独立してるっぽいけど、確証となるブロックダイアグラムみたいなのがIntelのドキュメントを漁っても見つからないorz Q3. Core i7の分岐予測メモリって、コードが共通なら全スレッドで共通?それともスレッドコンテキスト毎にきちんと別統計になるんでしょうか? Q4. VC(2008)付属ライブラリの数学関数(おそらくコプロセッサを使うはず)はスレッドセーフですか?またそれは/fp:オプションによらず不変? よろすくおながいしますorz
- 335 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:24:51 ]
- A1: Windows 98, 2000以降はyes
A4: yes
- 336 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:51:28 ]
- A2 コア別でしょう。たぶん。コア間共有なんて設計のほうが難しいと思うよ。
A3 コア別でしょう。たぶん。コア間共有なんて設計のほうが難しいと思うよ。
- 337 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 17:32:40 ]
- >>326
>CloseHandle((HANDLE)_beginthreadex()); その組み合わせはちょっちまずくね? ttp://msdn.microsoft.com/ja-jp/library/cc429080.aspx にメモリリークが起きると書いてある(ちなみにやねうら本(1)にもそう書いてある) ExitThread()を明示的に呼ばなくても、スレッド関数を抜けたら同じことのはず なお、>326の反対(CreateThread()が返したハンドルを _endthread()で開放する)は明白に危険であろうことが上のリンク先から推測できる (確保されていないメモリを_endthread()が解放しようとするハズ)
- 338 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 18:07:36 ]
- 何のために_beginthread()〜_endthread()や_beginthreadex()〜_endthreadex()があるかというと
strtol()みたいに、機能的にはマルチスレッド環境下でも動いて欲しいのだが関数仕様的にマルチスレッドと相容れないような 標準関数をマルチスレッド環境でもきちんと動くようにする目的なので(おそらくそのために内部的にスレッド局所記憶を確保している) そういう類の関数を明示的にも暗黙的にも呼び出さないと誓うならCreateThread()〜CloseHandle()で無問題
- 339 名前:308 mailto:sage [2010/03/07(日) 18:19:56 ]
- スマソstortol()じゃなくて問題なのはstrtok()とかlocaltime()とかだった、
- 340 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 18:53:55 ]
- >>337
_beginthread は起動されたスレッドが終了時にハンドルのクローズを行う。 _beginthreadex は別途CloseHandleする必要がある。その代わり、 スレッドが終了していてもハンドルは有効であり、スレッドの状態を調べることができる。 ここでのリークというのはCRTの作業域のことではなくて あくまでもスレッドを追跡するためのハンドルのこと。
- 341 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:27:39 ]
- >335, >336
レスdクス A1は実験的にも確認できた(イントリンシック関数が排他を含まないこと、およびxmm0とxmm1を使う関数を64スレッドで呼び出して無問題) A2はまあそう思う(ダイ写真でSIMDとコアの区別を確認できない&SIMDの数<コアの数ではマルチメディア目的に合致しない) A4についても使用予定関数について実験的に確認できた A3はちょっち謎 同一コードで記述され、同一コアで走る別スレッド(含HT)の場合どうなるのか? 同一コード条件とそうでない条件(コードをスレッド別コピーとする)とで速度比較すればいいんだろうけども コードをコピーすると分岐予測以前にトレースキャッシュ容量他の要因で速度低下するかもしれないから実験では精度良くは判断できない鴨
- 342 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:36:48 ]
- pthread_cond_wait状態になるまでに
結構時間かかるのですかね? 以下のようなコードを実効すると 結構頻繁に、別のスレッドがwait状態になる前に pthread_cond_signalを実効してしまうのですが 必ず、同期取るようにどうしたらいいのでしょうか thread1 { while(1){ pthread_mutex_lock(&m); pthread_cond_wait(&c, &m); pthread_mutex_unlock(&m); } } main { while(1) { pthread_mutex_lock(&m); pthread_cond_signal(&c, &m); pthread_mutex_unlock(&m); } }
- 343 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:39:08 ]
- どうやって確認したの?
- 344 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:45:01 ]
- 何がしたいのかよくわからんが、
とりあえずmutex取得する前にシグナル発行してたらいかんだろう。
- 345 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:54:13 ]
- thread1がlockするまえにmainがlock->signalしちゃってるとかありそう
- 346 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 07:06:51 ]
- >>337-338
つーか比較するものが間違ってる _endthread()/_endthreadex()は作られた側が(必要なら)呼び出すもので CloseHandleは_beginthread()/_beginthreadex()呼んだ側が呼び出すもの
- 347 名前:341 mailto:sage [2010/03/13(土) 23:42:54 ]
- 自己解決しますた!(いや、多分、だけど
Windowsのスレッドコンテキスト切替は、スレッドが走り続けている場合、どうがんばっても msオーダー周期(おそらく10 msとか20 msに1回)なので、分岐予測統計の結果がその間に十分安定する(と思われ だから分岐予測精度を上げるためにコードのコピーをスレッド別に用意しておく、みたいな神経質なことはしなくて宜しい かと、
- 348 名前:342 mailto:sage [2010/03/14(日) 01:04:34 ]
- 訂正
誤:分岐予測統計の結果がその間に十分安定する(と思われ 正:分岐予測統計の結果が現実的に安定している期間よりも桁違いに長い(と思われ ニホンゴ、ムズカシイデス、、
- 349 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:03:43 ]
- いやいやいやいや
いまはコア間での話ではなかったのか?
- 350 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:00:00 ]
- またえらい細かいオーダーで削ってるんだなぁ。
PCのWindowsでそこまでカツカツ削っても、すぐに時代変わっちゃうと思うけどなぁ。 他のとこに力入れた方が良くね? まぁ、トレースキャッシュとか気にしてるから、何か特殊な固定環境向けのガリガリな チューニングなのかもしれないけど。 俺も低レベルは好きだから、とりあえず触ることで知識と感覚を深めたい、ってんなら 止めないけど。単にバランス感覚の欠けてるケースに見えてしまうが。違ったらすまん。
- 351 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:19:21 ]
- >>349
分岐予測メモリはCore i7の場合物理コアごとに持ってるからスレッドごとに物理コアを違える場合は何も悩む必要はない 問題なのはスレッドの数が物理コア数より多いとか、同一物理コア内でのHTの場合(→341の下から3行目参照)
- 352 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:30:59 ]
- ハッよく考えたら>348-349のロジックじゃあHTの場合が解決してねーじゃんorz
同一コア内で走るHT0とHT1は、ハードウェアレベルで演算ユニット、L1, L2キャッシュ、トレースメモリを奪い合うので もし仮に分岐予測メモリのタグがアドレスのみから生成され、HT番号では区別されない作の場合問題になりえる ただしまあ現実的には同じアドレスに配置された同じ条件分岐命令が 1. HT0とHT1でほぼ同時に(=分岐予測結果の平均寿命(おそらく数μsec)オーダーの時間差内に)実行されるという状況が 2. 片方は分岐、片方は非分岐で 3. 無視し得ない頻度で反復される というケースでのみ問題だが >>350 というわけでWindows非依存な話
- 353 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 08:32:37 ]
- >>352
いや本人がWindows7を対象にしてるって最初に言ってるから
- 354 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 00:57:55 ]
- >>342
亀だが、それは条件変数の使い方を間違えとる いきなり無条件でcond_waitで待ってはいかん cond_waitは、あくまで「共有条件が望む状態になっていない時」に使うものだ cond_wait時に指定するmutexは、その「共有条件」をテストするためのものだ でもってcond_signalやcond_broadcastは、共有条件の変更があったことを通知して、共有条件の再テストの機会を与えるものだ なお、cond_signal, cond_broadcastの実行そのものには、mutexの取得は必要ない JMなんかのpthread_cond_initのmanページを見て、使用例を確認すると良い
- 355 名前:デフォルトの名無しさん [2010/03/27(土) 11:48:41 ]
- pthreadの記事を見つけたので読んでたら、
なんかコメントで色々指摘が入ってるんだけど、どうなの? ttp://codezine.jp/article/detail/1894
- 356 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 15:08:07 ]
- ここのコメント欄みづらいんだよね
最初の「必要以上に複雑になってる」という指摘は同意。 この記事って、バグのあるコードをだんだん直していくっていう 流れだけど、そもそもタイトルの条件変数関係ないバグだし、 修正内容も、なんか泥沼に入っていくような感じ その後のやりとは、この二人にしか分からないどうでもいいことについて、 どうでもいいやりとりしてるように見えた。
- 357 名前:デフォルトの名無しさん [2010/03/27(土) 15:20:18 ]
- >>338
これはわかりやすい!
- 358 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:05:41 ]
- 「Java並行処理プログラミング」が増刷してる
- 359 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 10:57:03 ]
- va_argsってスレッドセーフですか?
- 360 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:21:11 ]
- va_list を自動変数やTLBに置いていれば、va_listをスレッド間で共有しない限りは、スレッドセーフだと思うぞ。
- 361 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:11:15 ]
- >>360
嘘ついちゃだめ va_listはプロセスで1つだけしか持てないから スレッドセーフじゃないよ
- 362 名前:デフォルトの名無しさん [2010/04/19(月) 00:34:37 ]
- ボナンザ8コア対応を16コア対応にする方法を教えて下さい。
- 363 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 06:51:44 ]
- スレッドセーフかどうかってのはcrtのソース見ないと判断付かないって認識でおkっすか?
- 364 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 07:04:05 ]
- >>361
適当ぶっこくなカス
- 365 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 07:18:38 ]
- >>364
じゃあ証明してくれよ できないだろw?
- 366 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 07:28:20 ]
- >va_listはプロセスで1つだけしか持てない
- 367 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 07:59:36 ]
- それとスレッドセーフの話にどんな関係が?
- 368 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 08:31:37 ]
- >>365
簡単。 va_listはプロセスで複数もてるから スレッドセーフ
- 369 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 11:18:50 ]
- すみません、spin-lockをしている間にCPUの使用率を下げる方法を知っている方はいますか?
調べてみると、rep;nop命令やSSEのpause命令をがそれに該当するように思えるのですが、 使ってみても何ら変わりませんでした。 自作のスレッドバリア関数(自作のspin_lock)を作って、 たとえば、 if(threadnum=5) sleep(10); my_barirrer(); とするとスレッド5を待っている間は5以外のCPU使用率が100%近くなってしまいます。 それに対してOpenMP使った場合では、 if(threadnum=5) sleep(10); #paragma omp barirrer だと待っている間はCPU使用率は殆ど変わりません。 ちなみに自作のspinlockは下記のような感じです。 if(thread_num == 0) { asm volatile( "Loop1:\n\t\t" "movl (%0), %%eax\n\t\t" "movl (%1), %%ebx\n\t\t" "lfence\n\t\t" "cmpl %%ebx, %%eax\n\t\t" "rep;nop\n\t\t" "jne Loop1\n\t\t" : :"r"(&lock->sync), "r"(&lock->maxthreads) :"memory","%eax","%ebx" );
- 370 名前: ◆0uxK91AxII mailto:sage [2010/04/21(水) 15:37:33 ]
- >>369
方法はあるけど、物凄くマヌケで無意味だから誰もやらない。
- 371 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 19:01:35 ]
- スレッドとかの切り替えを自前で用意するとか
- 372 名前:369 mailto:sage [2010/04/22(木) 09:40:25 ]
- いろいろと試してみたのですが、マヌケな方法しか思いつきませんでした。
(スピンを何回かしたら、nanosleepを使うとか) pthreadのライブラリのソースを見てみると、futexのシステムコールが呼ばれているようですね。 OpenMPで生成したスレッドの中で実行される関数間でスレッドの同期をとりたかったのと、 せっかくOpenMPを使っているから、 pthreadとか使いたくなかったので自前のspin_lockを作ってみました。 マヌケな質問をしてすみませんでした。
- 373 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 03:22:14 ]
- ヒント:スピンロックを使わない
- 374 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:01:03 ]
- Win32でスレッド間のイベント通知をやりたいんですが
2つのスレッドが同時にそれぞれSetEvent(), ResetEvent()を呼び出した場合の動作って定義されてるんでしょうか? やっぱりクリティカルセクションで囲ってやらないとまずいですか?
- 375 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:39:08 ]
- >>374
囲む必要は無い。
- 376 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 08:17:54 ]
- >>375
ありがとうございます。
- 377 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 20:41:23 ]
- イベントオブジェクト自体の動作には問題ないけど、
使い方ミスりやすいから十分気を付けた方がいいよ。
- 378 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:08:00 ]
- プロのコードではイベントオブジェクトは使われない
- 379 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:37:24 ]
- 配布したときに問題が出るからな
- 380 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 03:50:40 ]
- どんな?
- 381 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 22:45:33 ]
- 無名にすれば他のプロセスと衝突することも無いし、kernel32.dllだから別にDLLも不要だし問題が思いつかないな
- 382 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 07:37:01 ]
- なんか勘違いしてんだろ
- 383 名前:デフォルトの名無しさん [2010/05/16(日) 21:15:32 ]
- wait-freeなキューの実装を可能にするのに必要な不可分操作ってどんなんですか?
- 384 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 23:08:56 ]
- 候補となる不可分操作には何があるの?
- 385 名前:383 [2010/05/16(日) 23:57:41 ]
- >384
JAVAのConcurrentLinkedQueueだとCASをつかってるってことしか知りませんが..
- 386 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 00:45:56 ]
- wikiによるとcasみたいだね
ja.wikipedia.org/wiki/Lock-free%E3%81%A8Wait-free%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
- 387 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:12:58 ]
- スレッド間のヘルスチェックに定番な方法ってあるのでしょうか?
・マスターなスレッドAが外部変数にスレッド数分bit1を立てる ・B以降のスレッドは、自分に対応するbitを落とす ・一定時間、0じゃなかったら誰かが止まってるのでNG とかすると、sem_wait()で普段寝ている人(これはその時だけ起こせばいい?)や、 recvやselectで待ってる人の確認はできない。。
- 388 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:00:00 ]
- スレッドのヘルスチェックって要るのかな?プロセス間だったら必要かも知れなけど。
- 389 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:05:09 ]
- 大事な役割を持ったスレッドが刺さってないか確認したいんじゃないの
- 390 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:47:25 ]
- タイムアウト指定して待ちっぱなしにならないようにするのが基本
- 391 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 18:56:29 ]
- ワーカースレッドとUIスレッド分けたとき、時間のかかる作業を
ワーカースレッドがしているとき、UIスレッドはどうしているべきでしょうか 今は終わるのを待たずに終わるまでデータ変更の起こる操作を禁止しています でもそれだとウィンドウ動かせるくらいしかメリットがないので考え中です
- 392 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 19:03:15 ]
- >>391
俺は[中止]ボタンが押されるのを待つか、タイマーで定期的に終了したかどうか チェックしてる。あとプログレスバー表示。
- 393 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 19:49:50 ]
- ボタンを禁止にしたりキャンセルを受け付けたり面倒だよな
それとプログレって、量的な変化ならいいが、 手続き的な進行表示には不向きだよな
- 394 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 20:05:26 ]
- 全体量がわからないやつはつらいよね
\-/-\-...ってやつが好きw
- 395 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:03:40 ]
- 経過表示なら1/n「(説明)」〜n/n「完了」でいいと思うんだ
- 396 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:34:30 ]
- progress_display「呼んだ?」
- 397 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 09:11:50 ]
- いや、全然呼んでないよ
- 398 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 14:48:12 ]
- マルチスレッド・アプリケーション開発のためのインテル・ガイド
www.xlsoft.com/jp/products/intel/article/guide/index.html
- 399 名前:デフォルトの名無しさん [2010/06/27(日) 14:54:02 ]
- >>391
おれはその処理に関連するメニューだけロック(選択不可とか無視とか)して他の操作は許可してる 処理が終わったら通知ポップアップ 処理状況なんかはモーダレスじゃないプログレスバーかステータスバー表示
- 400 名前:デフォルトの名無しさん [2010/06/27(日) 15:01:41 ]
- >>393
でも長時間うんともすんとも言わないと不安になるからそういう場合は一秒に一ブロックぐらい進むプログレスバー繰り返してる 中止は処理スレッドに定期的に中断フラグチェックさせてプログレスバーダイアログのOnClose/OnCancelで終了フラグOn+WaitForSingleObjectさせればOK
|

|