1 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 11:23:05 ] マルチスレッドプログラミングについて語るスレ。 OS・言語・環境は問わないが、それゆえ明記すべし。 その1 pc3.2ch.net/test/read.cgi/tech/997345868/ その2 pc5.2ch.net/test/read.cgi/tech/1037636153/ その3 pc8.2ch.net/test/read.cgi/tech/1098268137/
403 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 16:35:55 ] >>402 その手法が可能かどうかの前に、やろうとしていることに対して もっと単純な方法や、別の解法が無いか検討したらいいんじゃ ないかな。 ちょっと言語(Java?)の使い方から外れているみたいので、 本当にやりたいことが妥当かどうか見極めた方がいいと思う。
404 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 22:37:56 ] >>399 super.run();
405 名前:デフォルトの名無しさん [2006/03/16(木) 09:59:17 ] >>403 確かにそうだったかもしれん。ありがと。 >>404 いや、直接run()にアクセスするのは禁(ry
406 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 14:36:26 ] Linux 2.4.31-0vl1.8smp + glibc-2.3.3-3vl1.3 pthread (linuxthread) プログラムでたまーに(でも確実に) seg fault してしまいます。 該当箇所は pthread_mutex_unlock(&mutex_sleep); という処理で、mutex_sleep はグローバル。core dump に聞いてみたらこんな返事が。 Program terminated with signal 11, Segmentation fault. #0 0x080551c7 in __pthread_alt_unlock (lock=0x80cb548) at spinlock.c:600 } else if ((prio = p_node->thr->p_priority) >= maxprio) { (gdb) bt #0 0x080551c7 in __pthread_alt_unlock (lock=0x80cb548) at spinlock.c:600 #1 0x08051fc9 in __pthread_mutex_unlock (mutex=0x80cb538) at mutex.c:199 #2 0x0804e3cc in send_proc (arg=0xc) at send_proc.c:112 #3 0x08051709 in pthread_start_thread (arg=0xbdbffbe0) at manager.c:309 何か情報ありますか?
407 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 20:44:16 ] mutexがすでに死んでるとか?
408 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:30:14 ] Windows Threadについて質問です。擬似コードですが、 Thread[] threads = getAllThread(); foreach (Thread t; threads) { t.suspend(); } このような全てのスレッドを止めるためのループがあるとします。 このループ中では、既に止められているスレッドと、 これから止められる予定のスレッドがあると思うのですが、 これから止められる予定スレッドが、既に止めたスレッドを再開(resume)するため、 このループでは全てのスレッドを止められない、ということは起こりえるのでしょうか?
409 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:36:16 ] >>408 起こりうるでしょうね。 避けたいのならばまず自分の優先順位をトテモ高くして、 その後ループに入れば良いと思います。 先方のスレッドも優先順位を上げている恐れがあるのならば 完全ではありませんが。
410 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:36:36 ] 知らね。 だって、普通そんな造りにしないもん。 普通は、終了しろ、っていう合図を各スレッドに送って 自主的に終了なり中断なりするのを待つだけだから。
411 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:37:03 ] 起こりえる。 おまけにこれから止めようとするスレッドが新たにスレッドを作るかもしれない。 全スレッドで、「スレッドマネージ用ミューテックス」などを使用すればいいんでない?
412 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:39:04 ] 他のスレッドを suspend するってのはまず間違いなく設計ミス。 C のランタイムとか Windows に用意されているいろんな dll の 内部まで良く知っていて、何か大事なものの所有権を持ったまま suspend されちゃったりすることはないと確信を持っているなら 別だけど。
413 名前:408 mailto:sage [2006/03/16(木) 22:46:12 ] どうも。 実は、これのpause版とresume版がD言語の標準ライブラリの中にあって、 GCを呼ぶ前にそれでスレッド止めて、後に再開ようとしているみたいなのですけど、 それのへんでアプリケーション側で実装しているスレッドの同期が変になるみたいです。 安心できませんが、安心しました。
414 名前:408 mailto:sage [2006/03/16(木) 22:52:58 ] スレッドを止める仕様はどうしようもないのですが、 とりあえずは、全てを止めるループ中(pauseAll)に pause()、resume()とstart()が実行されないように排他とと 全てを再開(resumeAll)中に、resume()が実行されないように 排他したら大丈夫ということでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 23:01:54 ] >>414 GC 側が単純なメモリ操作などだけで、 他の処理で使っている(かもしれない)セマフォやミューテックスなどの 所有権なしで実行できるとするなら、問題ないはず。 例えば(MSのドキュメントを信用するなら)Windows API の OutputDebugString は、 内部で他のスレッドを全て Suspend した上でデバッグメッセージの送信を行い、 そののち Resume する、と同様の処理を行っているようです。 AP側のスレッドが変になるのはAP(or Dの何か他のライブラリ)のバグではないでしょうか。
416 名前:408 mailto:sagee [2006/03/16(木) 23:28:41 ] >>415 resumeThreadの戻りを見ながら、他スレッドのsuspend待ちをしている箇所があるので、 それが、排他されていないresumeAll中に走ると、 GCが止めてこれから再開する予定のスレッドを、 "アプリケーションが思っている理由"でsuspendしたのだと 勘違いして変になるのだと思っています。
417 名前:デフォルトの名無しさん mailto:sage [2006/03/17(金) 06:51:35 ] >>407 ありがとうございます。 pthread_mutex_destroy は呼んでいないので生きていると思っていたのですが、どうやら syslog(3) が関係しているようです。別の core dump に聞いてみたら syslog 関数で死んで いるケースが見つかり、付近の syslog(3) をはずしたら seg fault することはなくなりました。 syslog(3) と pthread (linuxthread) は混ぜるな危険とかいう話があるんでしょうか。 とりあえず syslog を自前で用意することにしてみます。
418 名前:デフォルトの名無しさん mailto:sage [2006/03/17(金) 07:20:23 ] その環境ではsyslog(3)はMT-Safeじゃないのに、排他してないだけとか
419 名前:http://www.vector.co.jp/soft/win95/util/se072729.html [2006/03/18(土) 19:49:50 ] TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
420 名前:デフォルトの名無しさん [2006/03/28(火) 00:13:15 ] こんな問題助けてください。 I/Oバウンドな処理をする処理プログラムが2個 CPUバウンドな処理をするプログラムが1個 それぞれCPUは85〜95%占有するほど負荷が大きいです。 またそれぞれI/O処理は多重スレッドはなく2つの独立した スレッドプログラムです。 Xeon 64bit x2 (64bitSMPカーネル+ HTTでCPU4個) Xeon 32bit x2 (32bitSMPカーネル+ HTTでCPU4個) Opteron 252 x 4(64bitSMPカーネル) Opteron 252 x 4(32bitSMPカーネル) いずれの場合も、CPUを占有したいと考えるならばcpu_affinityを ハードウェア的に割り当てるべきなのでしょうか。 それともカーネルのSMP処理に任せるべきなのでしょうか。
421 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 06:09:38 ] page outないくらいメモリが十分にあると考えると、 (OSによってはI/Oキャッシュがメモリを食い潰してしまいますが) I/Oバウンドな処理をするプログラムにCPU割り当てる意味ないでしょ。 けど、 > それぞれCPUは85〜95%占有するほど負荷が大きいです。 で「I/Oバウンド」なの? それからマルチスレッドじゃないw
422 名前:デフォルトの名無しさん mailto:sage [2006/03/28(火) 12:47:04 ] >>420 CPU占有を占有したいなら、邪魔しに来る恐れのあるほかのプロセスは どれか他のCPUに割り当てるべき。 CPUを占有することの利点は、 ・他のCPUでの処理の邪魔をしない ・各CPUが独立した2次キャッシュを持っているとき、キャッシュの汚染に よるパフォーマンス低下を避けられる(かもしれない) の2つくらい。 カーネルに任せるべきかどうかはなんともいえない。 プログラムの性格にもよるし、カーネルのスケジューラーの実装にもよる。
423 名前:420ではない mailto:sage [2006/03/29(水) 00:15:05 ] ぶっちゃけ聞きたいんだが、 「cpu_affinityをハードウェア的に割り当てる」 って、現在存在するOSの中でどれよ?
424 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 15:54:42 ] C++で質問ぬ beginthreadexで作ったスレッド exitthreadexしないで スレッド関数return で終了して CloseHandleしても問題ないですか? サンプルで exitthreadをreturn の前に呼んでるのと 呼んでないの があったので
425 名前:デフォルトの名無しさん mailto:sage [2006/04/04(火) 16:29:21 ] >>424 寧ろ、exitthreadするとC++のデストラクタが走らないので問題になりがち。 極力returnするべき。
426 名前:デフォルトの名無しさん [2006/04/06(木) 01:56:06 ] 世はSPEでプログラミングしたいのじゃ
427 名前:デフォルトの名無しさん mailto:sage [2006/04/06(木) 13:02:49 ] >>423 つ z/OS
428 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 00:01:57 ] 世界で始めてデッドロックを実際に経験した人って誰だろう。 あまりにもの恐ろしさに震え上がったことだろう。
429 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 21:33:59 ] 俺
430 名前:デフォルトの名無しさん [2006/05/06(土) 22:23:42 ] 哲学者よフォークを取れ!!
431 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:33:04 ] 先生、フォークが足りません!!
432 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:41:15 ] フォークを取ってどうすんだよw
433 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:46:41 ] 通じてないのかさらに深い洞察なのか…
434 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:47:34 ] そうかパスタを取れか!!
435 名前:デフォルトの名無しさん [2006/05/06(土) 23:50:03 ] >>434 てめー、すました顔してないで早くフォークよこせよ
436 名前:デフォルトの名無しさん [2006/05/06(土) 23:54:39 ] まず全てのフォークをいったんテーブルに戻して、 そして... 哲学者よフォークを取れ!!
437 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:55:20 ] すまん、記憶違いだったら悪いんだが。 哲学者よときたら「箸をとれ」じゃなかったか?
438 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:58:02 ] >>432 哲学者の食事問題を知らない奴キター
439 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:59:11 ] >>437 ヒント:哲学者は日本人ではない
440 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 00:00:54 ] ヒント:ダイクストラ
441 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 00:10:23 ] 哲学者よ 死ぬくらいなら手づかみで食え
442 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 00:11:25 ] 哲学者はきわめて明確な論理で行動するため、 臨機応変などという言葉は通用しません。
443 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 00:17:27 ] 哲学者は、野蛮では無く極めて理知的に出来ております。
444 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 01:26:53 ] Dining Philosophers Problem は設定がシュール過ぎて 授業中に笑い出しそうになった
445 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 04:53:31 ] シュレディンガーが猫を題材にしたのと通じるものがあるな
446 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 09:56:09 ] お前なーやめろよ 話の流れから シュレディンガーが猫を食材にしたのと通じるものがあるな と読んじゃったじゃないか まぁ、たいして違いはないが
447 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 13:34:52 ] 哲学者よ、明日はパスタにしよう。うん、パスタ。
448 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 21:18:36 ] 哲学者は手掴みで食べないものなのですか?
449 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 21:22:19 ] 哲学者はそんなはしたないまねはしません。 しかし決して人に譲ることもしません。
450 名前:デフォルトの名無しさん [2006/05/08(月) 00:23:38 ] 哲学者よデスマーチから逃げれ!!
451 名前:デフォルトの名無しさん [2006/05/08(月) 09:39:33 ] age
452 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:31:01 ] Cでスレッド固有のグローバル変数みたいなものって使えないかな ほぼ全ての関数でスレッドごとに値の違う変数使ってるんで 毎回引数に加えるのが面倒になってきた
453 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:48:51 ] 処理系固有でTLSなどがあるとは思うが。
454 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 22:34:47 ] >>453 サンクス。しらんかった
455 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:58:57 ] gccだと、 __thread int i; とか。
456 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 01:26:42 ] 調べました pthreadだとpthread_key_create()とかですね __threadの方が扱いやすいけどポータビリティとしてはどうなんだろう gcc依存でも別に困りはしないんですけどw 何はともあれありがとうございました〜
457 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 08:23:30 ] ポータビリティが気になるなら APR とか使うのは? apr.apache.org/docs/apr/group__apr__thread__proc.html#ga23
458 名前:デフォルトの名無しさん mailto:sage [2006/05/14(日) 15:00:46 ] 結城浩のデザインパターン スレッド編って買い?
459 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 12:59:06 ] . -‐- . __ 〃 ヽ : :ヽ\ ノノノ)ヘ)、!〉 : '. l(0_)!。-‐ ‐〈リ .はわわ〜マルチが459ゲットですぅ… ;Vレリ、" (フ/ ; : l´ヾF'Fl : ∧__∧____ ;. 〉、_,ノ,ノ : /|・∀・ ┥ ./\ . /ゝ/´, ヽヽ . . /| ̄∪∪ ̄ ̄|\/ : く/l |_ノト‐'⌒),) . | 拾って |/
460 名前:デフォルトの名無しさん [2006/05/20(土) 17:07:49 ] >>458 買い。
461 名前:デフォルトの名無しさん [2006/05/22(月) 00:45:49 ] longの読み書きについて質問失礼します。 @マルチスレッドで InterlockedExchange を使用し、longの値を変更しています。 A別スレッドで@で変更しているlong値を参照しています。 (読むだけの Interlocked〜 の関数が見当たらない為) この処理って大丈夫なんでしょうか? 実際にソースに組み込んでテストしているのですが、今の所大丈夫っぽいです。。。
462 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 01:19:41 ] volatile修飾すれば大丈夫という噂
463 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 01:25:57 ] 共有リソースを元に、あるメモリに書き込みとかをしなければ問題ないよ。 参照だけなら、何の問題もなし。
464 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 03:01:15 ] Interlocked.Read
465 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 03:01:52 ] てv1か… Interlocked.Readは2からだったな…
466 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 06:15:08 ] >>461 InterlockedExchangeAdd
467 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 16:38:37 ] Pentium XE 840 ではHyper-Threading有効となっているので、 デュアルコア×2スレッドで4スレッド同時処理ができますが、 HTの論理コアを判別する方法はないでしょうか? SetThreadAffinityMask() を利用して1つのコアを スレッドに対して独占的に割り当てた場合にHT論理コアだと 処理速度向上が余り望めません。 もしくはWindowsでCPU番号(コア番号)が どのように割り当てられるかご存知ないですか? 単純に↓とか? CPU1-Core1-Main CPU1-Core1-HT CPU1-Core2-Main CPU1-Core2-HT Opteron だと? CPU1-Core1 CPU1-Core2 CPU2-Core1 CPU2-Core2
468 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 18:35:25 ] >>467 何か勘違いしてないか?
469 名前:デフォルトの名無しさん mailto:sage [2006/05/23(火) 22:13:13 ] >>468 何か勘違いしてないか?
470 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:28:01 ] >>467 それはOSの仕事
471 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 09:01:15 ] SetThreadAffinityMask(hThread,0x01); SetThreadAffinityMask(hThread,0x02); SetThreadAffinityMask(hThread,0x04); SetThreadAffinityMask(hThread,0x08); とした時にどのコアが使用されるか知りたいってことじゃねーの?
472 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 11:26:01 ] >>467 www.intel.com/cd/ids/developer/asmo-na/eng/269421.htm SetThreadAffinityMaskでCPUにスレッドを固定した後、 当該スレッド APIC ID を入手して core id と SMT ID を入手すればよい。 用語が混乱してるようだけど、Coreっていうのはホントのcoreのことで、 コアの中で演算回路等を共有して独立したCPU風に振舞うのはlogical cpu とか SMT とか言う。 例えばDualCore でコアあたり2つのSMTをサポートするCPUの論理CPU構成は Core1-SMT1 / Core1-SMT2 / Core2-SMT1 / Core2-SMT2 だ、 とこんな風に言う。
473 名前:デフォルトの名無しさん mailto:あげます [2006/05/26(金) 12:26:42 ] CRITICAL_SECTIONを使う場合ローカルなstatic変数として使用してもよいのでしょうか? ↓のような関数をスレッド内で呼び出す場合です。(ここではcountに同時アクセスしないようにすることを目的とする) int hoge(int init, int del, int i) { static CRITICAL_SECTION cs; static int count; if(init) InitializeCriticalSection(&cs); if(!init && !del) { EnterCriticalSection(&cs); count += i; LeaveCriticalSection(&cs); } if(del) DeleteCriticalSection(&cs); return count; }
474 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 16:39:43 ] >>470 ヴァカ発見
475 名前:名無しさん mailto:sage [2006/05/26(金) 19:42:14 ] >473 関数のセマンティクスとしてはクソだが、特に問題は発生しないだろう。
476 名前:467 mailto:sage [2006/05/26(金) 20:21:43 ] >>472 なるほど…スレッドを固定してCPUIDでチェックすれば判別できそうですね。 用語解説は非常に勉強になりました。 ありがとうございますー 良く考えてみればSMT1が軽い負荷ならSMT2に重い負荷を かけても遅くならないのかな…? だとすると、同じコアのSMT1とSMT2に割り当てないようにすれば 効率が良さそうですね。
477 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 23:31:44 ] 時期尚早な最適化は諸悪の根源だ
478 名前:473 mailto:sage [2006/05/27(土) 00:41:46 ] >>475 どもです。
479 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 01:31:47 ] >>476 みんなpthreadのデバッグってどうやってやってますか? 1ソースコードから処理を推測してデバッグ 2とりあえずなんでもいいからprintf仕込んでデバッグ 3gdbを利用する 4ツールを使って調査する。 もしいいツールとか方法あれば教えてください。
480 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:05:19 ] >>479 つ【5 - pthreadの気持ちになってみる。】
481 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:17:16 ] >>479 pgdbgはどうよ? (というかプラットフォームは何よ?) Linuxは、IBMがpthreadを手がけた時に、 libpthdebug.aがAIXから持ち込まれるかと思ったが、 IBM版はlinuxサイドから拒絶されたので実現しなかった…
482 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:30:20 ] pgdbgですかぁ渋いですね それでいっちょ今から会社飛んでデバッグしてきますね
483 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 17:23:07 ] 基本的に知識足りてねぇって感じなんですが質問させてください。 boostのmutexとconditionでWindowsAPIのEventと同等機能をやろうと思ってやってたんですが boost::condition::notify_oneを呼ぶときもmutexでロックしないとまずいですか? これがデッドロックせずに動くってことは多分そういうものだとは思うのですが… boost::mutex g_mutex; boost::condition g_cond; void Wait() { boost::mutex::scoped_lock lk(g_mutex); g_cond.wait(lk); } void Notify() { boost::mutex::scoped_lock lk(g_mutex); // これって必要ですか? g_cond.notify_one(); }
484 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:06:05 ] それでええで。 examples/libs/thread/example/condition.cpp 見てみ。
485 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:06:55 ] examples/は余分やな…
486 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:20:41 ] だめだ、pthreadが周りでどうしても落ちる セグ落ちでどうしてもダメううーん発見できん 神様助けてくれ
487 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 23:20:52 ] >>484 ありがとうございます、スッキリしました。
488 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 18:30:41 ] >>486 落ち始める直前の状態にまで戻して何やったのか胸に手を当てて考えてみれ。
489 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 00:36:18 ] ふっふっふっふ私はもうスレッドは怖くない スレッドの挙動を完璧把握する方法を知ってしまった ふっふっふっふ
490 名前: mailto:sage [2006/06/01(木) 02:46:02 ] pthread_cond_timedwaitで、指定タイマーを経過しても待ち状態解除されず 停止したままになってしまっているのですが、引数パラメータに問題が あるのでしょうか。 gdbで確認したところ引数は問題なさげで、pthread_cond_timedwait内の pthread_sigsuspendで停止してるっぽいのですが…。
491 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 12:38:26 ] 糞カーネルを使っているに一票
492 名前:デフォルトの名無しさん mailto:sage [2006/06/07(水) 01:46:39 ] まずOSの種類とカーネルの素性晒せ
493 名前:デフォルトの名無しさん [2006/06/07(水) 08:46:05 ] LINUXですよ(^^)
494 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 01:10:24 ] それは windows でない。とだけ言ってるに等しい
495 名前:デフォルトの名無しさん [2006/06/08(木) 13:42:04 ] マルチスレッドとマルチプロセスでは一般的にどちらが効率的ですか?
496 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 18:36:22 ] タスク間のデータ参照が多いプログラムと少ないプログラムでは、どちらが「一般的」ですか?
497 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 01:47:28 ] volatileで回避できますか?
498 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 04:22:44 ] volatileとstaticで8割方回避できます!
499 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 08:47:58 ] なにをだ。
500 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 10:14:15 ] mutexとvolatileでは一般的にどちらが効率的ですか?
501 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 12:19:02 ] コーディング効率か コードの効率か で回答が変わってくる可能性がある
502 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 12:24:23 ] volatileはLockFreeで高速だが、アトミック操作に限定されるので、 一変数ならともかく、全体の整合性がどういう言い出すとプログラムは とっても面倒だし、バグがあるかないかの検証も面倒くさい
503 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 12:54:08 ] ( ゚д゚)ポカーン