[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 09:53 / Filesize : 193 KB / Number-of Response : 799
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

マルチスレッドプログラミング相談室 その6



1 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:35:32 ]
マルチスレッドプログラミングについて語るスレ。

その1 pc3.2ch.net/tech/kako/997/997345868.html
その2 pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 pc8.2ch.net/test/read.cgi/tech/1098268137/
その4 pc8.2ch.net/test/read.cgi/tech/1130984585/
その5 pc11.2ch.net/test/read.cgi/tech/1157814833/

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ

【OS】

【言語】

【実行環境】

【その他突起する事項】

577 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:30:54 ]
5日も前に誤爆だったと謝罪済みのレスに文句言う馬鹿って一体何考えてるの?

578 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:36:12 ]
脊髄で書いてるのだろう

579 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:15:56 ]
脊髄電脳化w

580 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:56:57 ]
マルチスレッド対応の
ハッシュリストのソースコードとかある?

581 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:32:38 ]
ハッシュは速いのが売りなんだから、まるごとクリティカルセクションで包んでおけ

582 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:51:50 ]
>>580
Javaのjava.util.concurrent.ConcurrentHashMap

583 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:19:30 ]
javaならHighly Scalable JavaのNonBlockingHashMap等
ttp://sourceforge.net/projects/high-scale-lib

584 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:02:03 ]
>>581
意味ねーw

585 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:39:30 ]
同期処理なんてしなくてよし。
すべては運任せ。
マルチスレッドの邪神様に任せておきなさい。



586 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:34:48 ]
コア1個ならなんとかなるさ、きっと

587 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:36:55 ]
●5 コアは一個だが、HTだった

588 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:09:15 ]
HTといえば、マルチコアの場合は異なるコア同士が同じキャッシュラインに
アクセスしない方がいいけど、HTの場合は逆になるの?

589 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:49:44 ]
マルチプロセッサ・マルチコア・HTで論理CPUが8個とかってどこのXEONだっけ?

590 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:41:04 ]
AMDのです

591 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:30:10 ]
>>588
キャッシュが共有の場合は、キャッシュラインが同じでもOK。そのほうが効率よい。
キャッシュが分かれている場合は、同じキャッシュラインへの書き込みは最悪になる。MESIプロトコルで具具ってみよう。

592 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:50:16 ]
journal.mycom.co.jp/articles/2008/03/02/isscc3/003.html
HTMって性能出るのかな。。

593 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:19:28 ]
トランザクションメモリって、
JavaのAtomicReference#compareAndSetみたいなのじゃだめなの?

594 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 16:58:48 ]
失敗したとき、その中でやったことは全部無しにしてくれるんだろうか?
>>593 良い場合もあるけど、例えば、複数のHashMapとかをatomicに操作したい場合は面倒じゃない?

595 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:18:48 ]
マルチスレッドなくなってしまう。
今までがずっとCPUだと思っていたものは、実はスレッドなんで、。



596 名前:デフォルトの名無しさん [2008/03/06(木) 02:46:25 ]
Windowsでの条件変数実装の話題蒸し返したいので、俺の調査結果を晒してみる。

apr -> 再帰mutex非サポートぽい?簡潔過ぎるし、他にもバグあるだろ絶対。
yaneSDK3rd::LockObject -> すごく分かりやすい実装。再帰ロックしてのwaitにバグあり。修正は簡単。
boost::condition -> 複雑。完璧なのか?タイムアウト監視にシステム時刻使ってるのが嫌。

自前のC++ライブラリ構築して使ってるが、
yaneSDK3rdベースの実装からboostベースに交換してみようと思って
とりあえず、boost::xtime使ってる部分はGetTickCountに変えた。
システム時刻は某通信プロトコルでいつでも変更されてしまうので。
っつーか、clock()とかにもFILETIME使ってるのってどうなのよ・・・
boost実装に>>473のような問題が無いか検証しようとしてるが、
こいつのアルゴリズムは結構複雑で手強そうだ・・・
肝心のACEのソースはまだ読んでない。

597 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:19:24 ]
条件変数の用途って
生産者/消費者的な使い方がかなりの部分を占めると思うんだけど、違うかな?
そういう用途のみに限れば、IOCP使えば充分なんじゃないのかね。
キューにデータがあるときはカーネルに行かないって言明されてるし。

598 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:15:16 ]
無知を承知で聞くけど、ユーザーモードに限って言えば
普通はCriticalSection一択じゃないの?
CriticalSection自体がSpinCountの設定次第でカーネルモードにいかないようになってるから
そのチューニングで大体の用途には間に合うと思うんだが。

VistaだとRead/Writeロックが実装されたから、そっち使ったほうが早いかもしれんけど。


599 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:32:59 ]
Windowsはあまり知らないんだけど、Enter/Leaveしか出来ないの?

600 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:25:08 ]
TryLock もバージョンが↓でなければできる

601 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 09:31:31 ]
VC++Windowsアプリの質問です。
メッセージループを1つのスレッドに隔離しようと思うのですが、
PostQuitMessage(0)を別スレッドから単純に呼び出しても安全でしょうか?

HWND g_hWnd
BOOL g_Active;

// g_Activeをクリティカルセクション内でやり取り
BOOL fGetActive();
VOID fSetActive(BOOL isActive);

INT WINAPI WinMain(...){
fSetActive(TRUE);
g_hWnd = (ウインドウハンドル作成);
メッセージループ用スレッド生成
while( fGetActive() ){
if(...) PostQuitMessage(0);
}
メッセージループ用スレッド後処理
return 0;
}
UINT WINAPI MessageLoop(...){
MSG msg;
msg.hwnd = g_hWnd;
while (GetMessage(&msg, NULL, 0, 0) > 0){
...
}
fSetActive(FALSE);
return 0;
}

602 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:40:27 ]
サブスレッドからアプリケーションを直接終了させる設計は変じゃないか。
メインスレッドに何らかのメッセージを送って、メインスレッドからアプリケーションを終了すればよいじゃない。
面倒なら、少々強引だが、PostThreadMessageでメインスレッドに
直接WM_QUITを送りつけるのも。あまりお勧めしないが。

603 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:57:27 ]
ウィンドウはそれを作ったスレッドに結びついているよ

604 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:10:12 ]
>>601
PostQuitMessageを別スレッドから呼び出すことは問題ないけど、
メッセージは、ウィンドウの作成元のスレッドにしか来ないよ
別スレッドでGetMessageしたかったら、そっち側でCreateWindowしないとだめ

605 名前:604 mailto:sage [2008/03/16(日) 13:11:34 ]
>PostQuitMessageを別スレッドから呼び出すことは問題ないけど、
って、ウソでした、カレントスレッドにWM_QUITを送るだけか
PostThreadMessageで相手スレッドにWM_QUITを送ればいいかも



606 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:31:10 ]
>>602-605
ありがとうございます。
MSG構造体へメッセージを送る際のデッドロックが心配でした。
>>602
>サブスレッドからアプリケーションを直接終了させる設計は変じゃないか。
ウインドウモードだと×からも終了させる場合があるのと、
メインスレッドのID取得が難しそうなので変えられなそうです。

607 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:42:23 ]
>メインスレッドのID取得
プログラム開始時にメインスレッドから GetCurrentThreadId を呼んで、
メインスレッドのIDが取得して、それをグローバル変数にでも入れておけば良いかも。

それがいやなら、メインスレッドにくくりついている非表示ウィンドウを一つ作っておいて、
そこに向かって PostMessage して、メインスレッドにメッセージをポストするのも手。
windowsではよくある話。

608 名前:601、606 mailto:sage [2008/03/17(月) 15:08:05 ]
もう一つ質問させてください。
メインスレッドがウィンドウを持ち、GetMessageのループをしていてかつ、
サブスレッドがメインスレッドのウィンドウにDirect3Dで描画している場合、
GetMessageとDirect3DがHWNDへのアクセス権をもめてクラッシュしますか?

609 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:22:56 ]
swapchainでググれ

610 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:00:28 ]
サブスレッドでバックバッファに書き込んだ後、
メインスレッドにバッファを転送するべきという意味ですか?
うーん……

611 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:18:56 ]
>>608
クラッシュしませんよ。
ただ、例外があって、ディバイスをリセットするときだけはディバイスを作成したスレッドからリセットを
コールしてあげないといけないからその点は注意。
メインスレッドでディバイスを作成した場合は、サブスレッドからはリセットは出来ない。

なので、もし、サブスレッドからディバイスをリセットする場合は、
まず、適当な自作ウィンドウメッセージをサブスレッドからメインスレッドのウィンドウに投げて、
メインスレッドのウィンドウがそれを拾ったらメインスレッド側から
ディバイスをリセットする。


612 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:47:01 ]
Linux 2.6.21です
sigwait()しているスレッドに他のスレッドからpthread_cancel()を実行してもスレッドがキャンセルされません
sigwait()はキャンセルポイントのはずなのになぜ、と困惑しています
うちの環境のみなんでしょうか
もしくはLinuxの仕様?

613 名前:612 mailto:sage [2008/03/19(水) 07:24:50 ]
すいません、自分の勘違いでした

614 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 19:48:12 ]
すいません。教えてください。
linux 2.6.20でpthreadです。
sched_get_priority_minとsched_get_priority_maxで優先度の
最大値と最小値を得たところ両方0でした。
これは優先度を選択できないということでしょうか。
優先度の最大値、最小値を得るのに使った引数は
sched_getscheduler(getpid())で値は0でした。
よろしくおねがいします。
あ、あと書き忘れましたがlttng0.9.0のパッチを当ててます。


615 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 20:06:05 ]
>>614
www.linux.or.jp/JM/html/LDP_man-pages/man2/sched_get_priority_max.2.html
>Linux では SCHED_FIFO と SCHED_RR では 1 から 99 の範囲の静的プライオリティーを持ち、
>SCHED_OTHER と SCHED_BATCH ではプライオリティとして 0 を持つ。



616 名前:614 mailto:sage [2008/03/25(火) 21:04:25 ]
ありがとうございます。
優先度を指定しよう思ったらSCHED_FIFOかSCHED_RRにしろということですね。
考えて見ます。


617 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 02:52:53 ]
RTの付いたカーネルじゃないとダメじゃなかったっけ?

618 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 00:04:13 ]
Numaで確保した共有メモリ内に
pthread mutext仕込むと
Numaで共有しているマシン間で
排他取れるの?



619 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 13:08:46 ]
出来ないの?

620 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:36:00 ]
教えてくれよw

621 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 07:07:46 ]
POSIX準拠なら取れないとおかしいという結論になるはず。
「NUMAで確保したの共有メモリ」がPOSIX準拠かどうかまでは知ったこっちゃねぇ。

622 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:27:39 ]
もし出来ないなら、アドレス空間が共有できてもうれしくないと思うんだが。
割と普通なOpteron複数搭載機ではまる人が続出しそう。

623 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:10:05 ]
docs.sun.com/app/docs/doc/819-0390/6n2qp46ei?a=view

この関数ってなんか役に立つの?

624 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:11:50 ]
??




625 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:19:17 ]
>>623
リード側と書き込み側の間でブロックしにくくなるんじゃないかな?



626 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:37:03 ]
>>625
じゃあmutexでおk?

627 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 05:29:38 ]
??

628 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 09:01:57 ]
read同士でblockしない点が有用。

629 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:00:18 ]
あるデータAをRWロックでブロックしてるとする

スレッド1がAを読み込もうとしてるときに・・・

スレッド2がAを読み込むことがある
スレッド3がAを書き込むことがある

となっている2つの場合を考える

もしスレッド1と2のみであれば、Aの値は不変のはずだから
1が処理中でも2は処理できる。
つまりRead同士ではブロックする必要がない

しかし、1と2が処理中に3が処理しようとするとおかしくなる。
だから読み込み同士ではブロックないが
書き込みはブロックしないといけない。
これがReadロック。

逆に、3が動いているときに、1と2が読み込もうとしている場合は
3が終わるまでは1も2も読み込んではいけない。
スレッド4が書き込みをしようとしてたとして、これも当然ブロックしないといけない。
つまり排他処理するのがWriteロック。

これをMutexに置き換えると、Read同士でブロックしてしまう可能性があるので
その頻度によってパフォーマンスが落ちることが考えられる。
しかし、とりあえず動かすことが重要であれば、置き換えるだけでも動く。



630 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 12:43:28 ]
マルチスレッドで仕事量分割するための
手法説明している本ってないっすか?

631 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:24:51 ]
VC6でマルチスレッドのアプリ作ってるんだがトラウマになりそうだ

632 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:27:49 ]
マルチスレッド間で
カスタムメモリアロケタ君を
書きたいけど基本的なロジックとか
みんな何参考にしてるの?

633 名前:デフォルトの名無しさん [2008/04/13(日) 23:00:37 ]
すみません。

デバッグ中に、CPU帯域を独占してるスレッドを特定したいのですが。
なにかいい方法はありませんか?

開発環境はVisualStudio2005で言語はVC++です。


634 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:02:22 ]
パフォーマンスモニタでスレッドIDごとの負荷率が出る。
スレッドIDはデバッガで一時停止のスレッドで見られる


635 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:17:59 ]
>>634
ありがとうございます。
特定できました。



636 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:54:17 ]
>>635
特定しました。

637 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 14:08:38 ]
特定しますた

638 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:40:16 ]
lock-freeアルゴリズムの
検証方法教えてくれよ

どうやって正当性保障するんだよw
あれ難しすぎだ

639 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:56:56 ]
SPINみたいなのを使うんだろうか?

640 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:36:09 ]
volatileで十分

641 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:52:23 ]
原論文に検証あるだろ?

642 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:53:58 ]
それが理解できないから、易しく解説して

って言う話じゃないのかな。

643 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:43:36 ]
数式での検証と
実装の検証は違うと思うのは俺だけw?

俺は頭が悪いんだろうなw

644 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 23:37:15 ]
うん、頭が悪い。

「プログラムの正しさの証明」って言われて、
この証明が数学で言う証明のことだと理解できないタイプ。

645 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:35:55 ]
実用性ない数式出されてもなぁ
後から付帯条件つきまくる数式
出されてもなぁ




646 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:36:27 ]
マジで頭悪そう

647 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:16:26 ]
ここも過疎ってるよなぁw

648 名前:デフォルトの名無しさん [2008/04/23(水) 08:00:42 ]
一覧に無いからだと思うあげ!

649 名前:デフォルトの名無しさん [2008/05/02(金) 17:43:24 ]
自作板にいるキチガイです。シングルスレッドで作成されてるソフトが
カーネルによってマルチコアにスレッド(タスクのことか?)が分散されると申しております。
このIDだけの発言では分かりにくいが、このスレにはシングルスレッドでもマルチコアのほうが早いと
のたまわってるキチガイがいます。
まだまだシングルCPUで頑張る人集合
pc11.2ch.net/test/read.cgi/jisaku/1169829748/

800 Socket774 sage New! 2008/05/02(金) 08:31:32 ID:Aaj/7HlH
このスレのシングルコアユーザーは未だにWindows3.1を使ってるようだw
801 Socket774 sage New! 2008/05/02(金) 08:32:49 ID:Aaj/7HlH
プログラムのスレッドと
CPUが処理する単位のスレッドは
意味が違うw
802 Socket774 sage New! 2008/05/02(金) 08:42:42 ID:Aaj/7HlH
プログラムのスレッドはカーネルによってさらに細分化される
与えられたCPUタイムによってそれを1つづつ実行していく
大まかに2ブロックに分割されたとしよう
1コアが1ブロックを実行してCPU使用権が終了する
その時に2コアが暇をしてるので2ブロックに即座に使用権が渡される
つまり単純に2倍の処理性能になる
806 Socket774 sage New! 2008/05/02(金) 10:52:29 ID:Aaj/7HlH
いやだからマルチスレッドOSって時点で
実際のCPU利用率は半分以下なんだよ
どんだけがんばってもそうなの
シングルコアだったら100%使えるとかないからw
コアが2になるとより100%に近い状態になるわけ
一般に1.8倍だと言われる
MS-DOSやWindows3.1を使ってる人はシングルコアのが早いかもねwww
807 Socket774 sage New! 2008/05/02(金) 10:57:04 ID:Aaj/7HlH
>>803
ベンチマークのような単純処理の繰り返しではスレッドの細分化はほとんど行われない
ゲームみたいな大きなスレッドになると実際に4倍近くの性能を発揮する

650 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:51:33 ]
>>649
頭のおかしな人というのはある程度の確率で常にあらわれるものであって、
そういう人がいるのはおかしいとか、説明して頭をよくしてあげよう等の考えは
全くの無駄だと思う。中身の入って無い枝豆同様ハズレとして無視するよりない。
いらいらする気持はわかるけどね。

651 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 17:52:33 ]
コピペ君に応答する奴も馬鹿だな、まで読んだ。

652 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 19:14:41 ]
osのタスク切り替え戦略によってはそうなるかもしれないけど、
普通は強制的な一定タイムスライスじゃないよね。
システムコール待つのにビジーウェイトでもしてると思ってんのか。

653 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:14:27 ]
ほかのタスクや割り込み処理に割り込まれる可能性が減る(ほかのCPUに割り振られる)から
「遅くなりにくい」ということはいえるが
速くなることはないだろうなあ。

って件のスレで当人書いてるじゃん

654 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:56:31 ]
1coreの時にOS側のタスクによるオーバヘッドが1%程度あったとすると
2coreならアプリの実行時間が1%短くなる程度なら有り得る

655 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 06:58:19 ]
ゲームでならDirectSoundは別スレッドで動いてるので
もうちょっと効果あるかもね。



656 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:29:25 ]
例えばX11だと描画はサーバプロセスが行なうから結構効果がありますね。
でもそれをシングルスレッドアプリが速くなると言ってしまうとちょっと違うと思いますが。

657 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:33:56 ]
よっぽど単純なプログラムでもない限り
完全なシングルスレッドなんてあり得ないんですけどねw

658 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:40:56 ]
たとえばEXCELで
再計算処理が行われてる時にメニューを実行すると
再計算、描画、メニューの3つのスレッドが形成される



659 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 08:47:38 ]
ビス太のユーザーランドスレッドの方針を分かって話してるの?

660 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:26:31 ]
スレッドプールのはなし?

661 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:17:42 ]
>>658
スレッドが生成されるかどうかと
並行実行するかどうかは別だぞ

662 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 18:15:41 ]
OpenMP中で使ってるとか
そんなんじゃねーのw

663 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 19:22:28 ]
>>661
XPでは平行実行してるが?

664 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 19:59:25 ]
>>663
させるかどうか、だ

665 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:51:43 ]
シングルスレッドでコンパイルするやつはいないだろw



666 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:40:42 ]
それまでの話の流れとは関係ないが

「マルチスレッド対応ライブラリを使用する」と
「マルチスレッドで動作するプログラムにする」は全く違うのだが
まさかとは思うが、>>665はそういう意味じゃないよな?
当然、「コンパイラをマルチスレッドで動作させる」だよね?


一応触れておくと
Win32で普通にGUIプログラムを作る場合、明示的にスレッド関連の操作をしない限り
マルチスレッドで動くことは無い。
何故なら、メッセージキューが1スレッドに1つ作られるので
そこからのイベントで処理を記述する書き方だと、1スレッドにしかならないから。
(イベントハンドラでスレッド操作をすれば当然マルチスレッドも可能)
もちろん、カーネル内の処理(割り込み等)は別。

667 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:59:30 ]
そういえば、Win9xのWinsock2の非同期処理は
内部的にスレッド作って擬似動作させてたんだっけ。
忘れてた。

668 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 01:14:13 ]
>>666
メッセージキューも明示的に作る(作らせる)ものであって
スレッド作成=メッセージキュー作成じゃないよ。

669 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:10:33 ]
> メッセージキューも明示的に作る(作らせる)ものであって

具体的にどうやって作るの?

670 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 12:39:33 ]
MSDNのPostThreadMessageの所に書いてあるな

671 名前:まあ、明示的がどうかは人によって違うと思うが... mailto:sage [2008/05/04(日) 16:07:57 ]
これのことかな...

> その後、ポスト先のスレッドで、
> PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) を呼び出し、
> このスレッド用のメッセージキューを強制的に作成します。

でもこれって、

> スレッドが Win32 のユーザー関数または GDI 関数のいずれかを最初に
> 呼び出した時点で、システムはそのスレッドのメッセージキューを作成
> します。

ってことだよね。

あまり「明示的」とは思えないんだが...。

672 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 17:10:13 ]
風が吹いたら桶屋が儲かるくらい暗黙的でなければ明示的

673 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:53:30 ]
いや別にメッセージループに入ったからといって
CPUを最後まで占有出来るわけじゃないのだ
途中で強制的に割り込まれる
そうすると他のループに権利が渡されるだけだな
マルチスレッドでコンパイルすると各メッセージループは完全に独立したスレッドになる
だから既存のアプリもほとんどはデュアルコアの恩恵がある

674 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:11:24 ]
おまえはそんなにメッセージループを作っているのか?

大多数のアプリはWinMainの中のGetMessage1つだけだと思うが

675 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:12:03 ]
それと、「マルチスレッドでコンパイルする」の意味を具体的に説明しろよ



676 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:14:14 ]
上の方は、プリエンプティブマルチタスクの解説で、4行目の
「他のループ」=「他のプロセスのメッセージループ」なのかなー
と思って読んでいたが

>マルチスレッドでコンパイルすると各メッセージループは完全に独立したスレッドになる

え?

677 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:56:45 ]
ちょっぴりエスパー能力を発揮して解読してみた。

普通、「メッセージループ」と言うと
while (GetMessage()) { ... } の部分のことを指すと思うのだが
おそらくこのヒトは、DispatchMessageで間接的に呼ばれるルーチン、
大抵は「WndProcの呼び出し1回」のことを
「メッセージループ」と呼んでいるような気がする。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<193KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef