- 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/
- 552 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 22:21:17 ]
- そんなにパフォーマンス気にしてるのに
何でロックファイルとかにいくんだ…
- 553 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 22:39:45 ]
- 英語でプログラミング勉強スレ
academy4.2ch.net/test/read.cgi/english/1151414777/l50
- 554 名前:539 mailto:sage [2006/06/27(火) 22:53:13 ]
- >>551
でも、プログラムは大抵、ひとつのスレッドから開始されるんだよ。最初からふたつってわけじゃない。 まあ、だから、>>545 は使えないんだよな。
- 555 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 23:12:31 ]
- なにか、壮大な勘違いをしている予感
- 556 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 01:48:11 ]
- まず、「同期する」をどういう意味で使っているのか説明してもらってからだな
- 557 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 01:56:37 ]
- 同期の人と一緒に仕事をする
同期するじゃね?
- 558 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 03:31:41 ]
- >>539
そういうのは、ふつーにeventだの何だのをでも使ってみて、重くてやってらんなくなってから考えれば良い。
- 559 名前:539 mailto:sage [2006/06/28(水) 14:26:16 ]
- >>558
なんだそりゃ。そう言う回答は勘弁して欲しいぞ。
- 560 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 16:09:22 ]
- なんで>>539は質問してる身分でやたらと偉そうなの?
リアルでもそういう質問の仕方しか出来ない人?
- 561 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 16:16:15 ]
- >>559
「回答」ではないだろう。 「重そう」と思うだけで実際にやってみることもせず そのくせ「ロックファイル」なんて単語まで飛び出し 結局何がしたいのか、「同期」が何を指しているのかも 説明してくれない君への アドバイスじゃまいか。
- 562 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 16:45:09 ]
- おまえら馬鹿なんじゃね?
- 563 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 16:54:40 ]
- >>560-561
ウザ
- 564 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 17:45:49 ]
- つーか、時々デッドロックするようなプログラムしか作ってないのかょ、おまえらは。
- 565 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 17:46:52 ]
- なにか、壮大な勘違いをしている予感
- 566 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 18:17:22 ]
- なにかが気に喰わなくて暴れ始めたお母ん
- 567 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 18:54:40 ]
- 予感でプログラムが組めるヤツはニュータイプ。
- 568 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 21:21:38 ]
- まてまて。
>>539 はWindows のカーネルやAPIを設計した人たちや 普段からマルチスレッドAPなんかさんざ書いてる漏れも 見落としている、何か難しい問題に対処しようとしてるんだよ。 それはたぶんロックファイルと関係のあるなにかなんだろう。 漏れには想像もできないが、頭ごなしに否定しないでだまって 観察してあげるべきじゃないか?
- 569 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 22:34:06 ]
- なにか、壮大な勘違いをしている予感
- 570 名前:asdlman mailto:sage [2006/06/28(水) 22:40:26 ]
- >>569
>>555 lead reth !!!
- 571 名前:asdlman mailto:sage [2006/06/28(水) 22:47:52 ]
- >>569
>>555 test
- 572 名前:デフォルトの名無しさん mailto:sage [2006/06/28(水) 23:21:13 ]
- Vistaから同期IOのAPIがキャンセル可能になるそうですね!
- 573 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 13:12:51 ]
- それは、非同期IOのことだろ。
- 574 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 15:47:52 ]
- >>573
同期IOだよ。非同期IOのキャンセルならWindows98でも出来る。
- 575 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 15:54:38 ]
- それを非同期というのではないのか?
- 576 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:11:59 ]
- >>575
めんどくさいなーもう。ほらよ↓ 今まではCerateFile なんか非同期版がなかったからキャンセルできなかっただろ? www.microsoft.com/japan/msdn/windowsvista/general/win32iocancellationapisv2.aspx
- 577 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:29:46 ]
- >>575
いや、絡んでるつもりは全くなかったんだ、すまん。 つまり、同期I/Oを他のスレッドで実行することによって擬似非同期I/Oの ような使い方をしたときに、そのAPIの実行をキャンセルすることができる ようになったということだな。 同期/非同期とはそういうことだったのか。勉強になった。
- 578 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 16:30:17 ]
- s/>>575/>>576/
- 579 名前:デフォルトの名無しさん [2006/07/01(土) 17:16:56 ]
- Linuxのカーネル層でマルチスレッドのような
設計が必要になっているんですが、 Aという関数が終わったらBの関数で 止めていたところが動き出すような設計って どうやったら良いもんですか? セマフォを使った排他処理ってデータに 対する排他処理になると思うんだけど、 そういう形で発想の転換をしないと駄目なのかな?
- 580 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 19:10:53 ]
- 待ちたいところでスピンロックでもasm WAITでもなんでもしておけばいいだろう
- 581 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 21:33:47 ]
- >>579
condは適当に初期化。 A() { 〜; pthread_cond_signal(&cond); return; } B () { pthread_cond_wait(&cond); 〜; return; }
- 582 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 22:07:31 ]
- >>581
参考になります。 これってAのreturnの直前でBが動き出す ということですよね? Aが終わってからってのはやっぱり難しいのかな。
- 583 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 22:20:08 ]
- >>582
AA() { A(); pthread_cond_signal(&cond); return; }
- 584 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 22:23:13 ]
- >>522
昔の奴へのレスで恐縮なんだがWindowsのSleepってそんな精度悪かったっけ? ::timeBeginPeriodとか使っても駄目?
- 585 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 22:49:29 ]
- 他に忙しく仕事をする連中が居なければ、だいたいは大丈夫かもね。
- 586 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 23:26:40 ]
- >>585
なるほど まあそれほど信用できないってことか。
- 587 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:04:19 ]
- スレッドの教科書ってどんなのあるの?
アルゴリズム系に強いやつが欲しい
- 588 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:14:48 ]
- OSによって違うな。
pthreadなら>>1->>9辺り見て。
- 589 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:18:29 ]
- Lamport's bakery algorithmとかさこんな古典的なやつから
今の新しいアルゴリズムまで載ってるのないのか.....
- 590 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:49:51 ]
- >>583
AAは別の人のソースなので手を加えられないのです。 でも参考になりますた。 ありがとうございますた。
- 591 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 06:53:31 ]
- windows には win32 API で色々なイベントを使えるようになってますが、
UNIXではpthreadのイベントを使う以外にないのでしょうか?
- 592 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 07:26:25 ]
- >>591
例えばこういう奴? www.monkey.org/~provos/libevent/ どの UNIX を対象にしているかで答えも変わるけど、大抵はググれば色々出て来る。
- 593 名前:デフォルトの名無しさん [2006/07/05(水) 10:16:26 ]
- Winsock、_beginthreadで起動して、
グローバル変数で終了要求するような、 簡単なスレッド書いているのですが、、、。 スレッド内でrecv()のような、 ブロックするような関数を呼びたくなりました。 これを終了するにはどうしたらよいでしょう。
- 594 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 10:30:57 ]
- ソケットオプションでノンブロッキングにすればいいんでない?
- 595 名前:デフォルトの名無しさん [2006/07/05(水) 11:33:24 ]
- 594>
ありがとう、そうします。 一般的にはどうでしょ? ブロッキングするような関数をスレッドで呼んではいけない?
- 596 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 11:51:06 ]
- ブロッキングするべき状況と、そうでない状況がある。
前者ならブロックさせとけばいいし、そうでなければ非同期APIを使うか、 別個にスレッドを作ればいい。
- 597 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 11:59:52 ]
- >>593
recv()呼ぶ前にMSG_PEEKしておくなりしとかんとあかんよ。 #つーか、TCP受信処理を途中で終わらせると言う仕様そのものが如何なものかと。
- 598 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 13:48:39 ]
- >>595
一般的かどうかは知らないけど、普通はselect使うんじゃないかな。
- 599 名前:593 [2006/07/05(水) 13:49:40 ]
- >>596
「強制終了」以外は普通にブロックして、データが届いたときだけ 処理してくれればいいんだけど。って状況でした。 非同期っていうと、WSAEventSelect, WSAAsyncSelectで、通知を待つって ことでよいですよね? >>597 ちょっとわかんないのですが、 MSG_PEEKで、受信データが無いときはどうやって次の受信データを待つのが綺麗? あと、途中で終わらないとしたら、どうやって終わるのがよいですか?
- 600 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 18:14:11 ]
- >>599
WSAAsyncSelect(s, hwnd, 0, 0); shutdown(s, 1); while (recv(s, buf, buflen, 0) != 0) {} closesocket(s);
- 601 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 19:33:20 ]
- >>600
それ先方がデータ送ってくれないとCPU100%のビジーループ。 サーバアプリでは非常によろしくないコーディング。
- 602 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 19:50:55 ]
- recvって、ブロックするんじゃないの?
- 603 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 19:54:13 ]
- スマソ。ノンブロッキングのソケットと勘違いしてた。
- 604 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 20:35:06 ]
- WSAAsyncSelectした時点でノンブロックになる
- 605 名前:593 [2006/07/06(木) 17:50:25 ]
- 任意のタイミングで終了させたいスレッド内では、ブロックする関数は呼ぶな。
socketはデフォルト非同期で。 で理解しました。 ありがとう。
- 606 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 19:44:58 ]
- >>605
そう理解したんならそれでもいいが・・・
- 607 名前:デフォルトの名無しさん mailto:sage [2006/07/06(木) 22:55:34 ]
- ソケットを任意のタイミングで終了させると再起動したときにわややがな。
- 608 名前:593 [2006/07/06(木) 23:34:44 ]
- >>607
どゆこと? 例えばサーバ的なアプリで、その受信用スレッドを、サーバ的なアプリ のユーザ都合でブチっとしたくなった場合、、、 受信処理を終了させて、クローズなり何なりをしたい。 そんな場合ですが、再起動とは、ここでサーバ的なアプリを再度起動して 受信を始めようとした場合になにかが起こるってことですか?
- 609 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:34:15 ]
- 下の層が受信しているのにアプリが落ちたら、次に起動するときにbindErrorになる。
- 610 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:43:27 ]
- つかさ、断片的な情報を積み重ねて信頼性のないアプリ作るよりさ、
ばしっとWinsock Programmer's FAQとか、Winsock関連書籍を読み とおして、きちっとしたアプリを作ろうとは思わんのかね。
- 611 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 01:07:01 ]
- >>609
アドバイスするなら、その前にFAQくらい読んどけよ。 知識足りなさ過ぎ。
- 612 名前:593 [2006/07/07(金) 10:11:03 ]
- >>610
終了するときは、shutdown(sock, 1) をスレッドの外から呼べ、 そうするとrecvが0返すので、スレッドを抜けろ。 で、理解しました。ありがとう。
- 613 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:42:52 ]
- >>609
100%賛成して同意して応援します。 他人のいう事に惑わされたりマニュアルやFAQを読んだりせず、 先方が送信を続けている間は終了できないプログラムを作り続けてください。
- 614 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 11:56:22 ]
- >>593
fcntl(s, F_SETFL, O_NONBLOCK); って使えない? (Windowsだとこれはないのかな?) >>595 select() 使う場合は他のスレッドが同じソケットから読まないように 作る必要がある。recv() ではあまりないかも知れないが、サーバ用に bind() した一つのソケットに対して複数のスレッドから accept() する場合にselect()使うとハマる(2つ以上のスレッドがselect()を通過 した場合に一つのスレッド以外がブロックする)。防止するには上に 書いたような fcntl() で O_NONBLOCK セットして accept() で止まら ないようにする。 >>609 最初に setsockopt() で SO_REUSEADDR をセットしとけばいいんじゃないか?
- 615 名前:デフォルトの名無しさん [2006/07/08(土) 02:08:08 ]
- volatile最強
- 616 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 10:36:46 ]
- メモリモデル勉強しる
- 617 名前:593 [2006/07/09(日) 20:09:28 ]
- 最後にもひとつ。
一般的に、マルチスレッドで使われることを前提にした、受信待ちのような ブロックする関数を提供しようとした場合は、それと一緒に受信を中断 して安全に返るための、他のスレッドから呼ばれる関数(socketの場合のshutdown) を提供すればよい。 ですか? 他に綺麗な方法あったら教えてください。
- 618 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 20:26:23 ]
- 一般的には、recvでブロックさせるのではなく
select系でブロックさせて selectをブレークさせる方法を使うだろ。 つまり「外部から解除できないブロッキング関数ではブロックさせない」と。
- 619 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 20:28:20 ]
- selectってキャンセル可能だっけ
- 620 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 20:36:02 ]
- selectで同時にパイプを待ったり
WSAEventSelectで同時にEventを待ったり というやり方のこと。
- 621 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 20:39:08 ]
- selectでtimeout設定すればいいと思うけど
それとももっと高度な制御がしたいの?
- 622 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 00:20:40 ]
- >>621
timeout 値の設定がめんどい。 仕方なく >>620 の WSAEventSelect 使ってるけど、 これはこれでめんどい。
- 623 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 03:56:03 ]
- pselect
- 624 名前:593 [2006/07/10(月) 10:22:26 ]
- >> 618
なるほど。 Linuxでは、読み込むものは全部ファイル(ファイルデスクリプタ)で、 中断など例外的な処理は全部シグナル。と思ってpselectで綺麗にい けていたんだけれど、 Winにいったら、いろんな方法がありそうだけれど、どれもいまいちに見えて。。 WSAEventSelectは、socket以外にも汎用的に使ったりする?
- 625 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 11:23:05 ]
- >>617
スレッド(タスク)開始、実行状況(実行結果)の取得、完了待ち、中断のための関数を それぞれ提供するのが一般的だと思います。 あと場合によっては先方のスレッドでコールバックされる実行状況の通知のための コールバック関数なんかも設定できると UI 作るときには便利(プログレスバーとか)。 >>624 個人的な意見だけど、Windows では(ソケットなら WSAEventSelect等も使って) (Msg)WaitForMultipleObjectExで待機、何かあれば処理するというのがマルチ スレッドの場合の定石だと思います。 ソケットだけ相手にするなら単にclosesocketしてしまうというのもアリだと思うけど。 >WSAEventSelectは、socket以外にも汎用的に使ったりする? ソケットを相手にしないのにWSA〜を使う局面は無いと思う。
- 626 名前:デフォルトの名無しさん mailto:sage [2006/07/11(火) 00:19:53 ]
- >>624
Winでも sock をファイルとして扱えるよ。
- 627 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 19:03:35 ]
- Linux (Kernel 2.6.17) で、pthread_create() で複数スレッドを作り、
そのスレッド全てが同一の bind(), listen() されたソケットに対して accept() を行うプログラムを作ったのですが(O_NONBLOCKなソケット ですが)、クライアントプログラムから複数 connect() すると、 accept() が同じ値のファイルディスクリプタを返して来ます。処理を 単純に書くとこんな感じです。 for(;;) { int cs = accept(...); // ここで cs が別スレッドと同じ値になる。 if (cs == -1) { if (errno == EAGAIN) { usleep(50000); continue; } else { break; // error } } else { proc(cs); // cs を使った処理。 close(cs); } } accept() の前後に pthread_mutex_lock(), pthread_mutex_unlock() で ロック、アンロックをしても同じでした。 これって Linux のバグなんでしょうか? これを回避するにはやはり accept() をするスレッドを一つにしないと 駄目ですか?
- 628 名前:デフォルトの名無しさん [2006/07/18(火) 19:04:29 ]
- すいません。質問なのに age 忘れました。age ておきます。よろしくお願いします。
- 629 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 19:32:26 ]
- わざわざageんなよ
- 630 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 22:10:43 ]
- コンパイル・リンク時のコマンドライン見せろ
- 631 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 01:14:42 ]
- >>627
> accept() の前後に pthread_mutex_lock(), pthread_mutex_unlock() で > ロック、アンロックをしても同じでした。 この時点でプログラミングの問題じゃないことに気付け。
- 632 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 01:56:34 ]
- >>627
>これって Linux のバグなんでしょうか? つかその前に、どこで習ったんだそんな阿呆な手順。
- 633 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 02:07:07 ]
- acceptしてからthreadおこせ
- 634 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 03:17:38 ]
- >>627
よく知らんけど、下記のApache のディレクティブの存在なんかを見ると accept は直列化 (同時に1つのプロセス・スレッドからのみ呼ぶ)するのが 普通なんじゃないかと思うが・・・ httpd.apache.org/docs/2.2/ja/mod/mpm_common.html
- 635 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 09:14:39 ]
- >>630
gcc hoge.c -lpthread >>631 どういう意味ですか? 同時に複数のスレッドが accept() しないように しただけですが? >>632 これは阿呆な手段ですか? 何故? その辺詳しく教えてもらえますか? どこで習ったかは記憶にありません。ただ昔 Java で似たようなものを 作った時はちゃんと動いたと思いました。 >>633 それはつまり accept() は親(?)スレッド一つでやるということですね。
- 636 名前:デフォルトの名無しさん [2006/07/19(水) 10:02:36 ]
- accept()を排他しても、
そのプログラムがまともにうごかん事に疑問はないのか? 他の部分がおかしいだけではないのか?
- 637 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 11:14:26 ]
- >>636
そこが疑問ですよ。なんで既に取得してオープンされているファイル ディスクリプタと同じ値のファイルディスクリプタが返って来るのか という点がね。 気になるのは Linux の場合スレッドは clone() システムコールで作った 特殊な別プロセスであるということです。別プロセスだから複数スレッドで accept() した時に同一ファイルディスクリプタが取れてしまうんじゃない かな、とは思ったんですが、確証がなかったので質問したんです。 (Linux板の方で質問した方がよかったかな? でも他のOSではこういうのは できないのかも少し気になる)。 で、その後、accept() を一つのスレッドでだけやって、他のスレッドは 待機させておいて、accept() 成功後にファイルディスクリプタを待機 スレッドに渡すように作り替えたらちゃんと動くプログラムは作れました。 理由はどうあれこういう風にするか、あるいは accept() 成功後にスレッド 作るように書かないと駄目なようですね。
- 638 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 11:25:03 ]
- >>627
> int cs = accept(...); // ここで cs が別スレッドと同じ値になる。 本当にこれと同じ書き方だったんだな? csが大域変数だったってオチがありそうだ。
- 639 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 11:30:07 ]
- >>638
いいえ。大域ではありません。autoです。
- 640 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 12:26:13 ]
- 生半可な学習しないで、ファイルディスクリプタについてちゃんと勉強したら?
- 641 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 13:35:02 ]
- >>637
>スレッドは clone() システムコールで作った ちょwwwwおまwwwww帰れwwwww
- 642 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 13:56:58 ]
- げ、pthread_createで作ってんじゃないのか・・・!!!
- 643 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:24:08 ]
- >>640
生半可? どの辺がですか? >>641-642 pthread_create() で作ってますよ。clone() は内部動作の話です。
- 644 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:29:47 ]
- こいつむかつく〜☆
- 645 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:36:37 ]
- >>643
コンパイルオプションとかはどうだろう・・・ -pthread とか付け忘れありませんか?
- 646 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:42:25 ]
- >>645
>>635
- 647 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:48:29 ]
- >>643
続きは以下で。 ネットワークプログラミング相談室 Port17 pc8.2ch.net/test/read.cgi/tech/1148944560/
- 648 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 14:59:44 ]
- >>646
-lpthread だけ指定して -pthread を指定していないのではないか、といっているのだが。
- 649 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 15:38:16 ]
- >>648
-pthread は指定していませんでしたが、man ページや info 見ると Linux では関係ないようですよ。 念のため指定してテストしてみましたが、同じ動作になりました。
- 650 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 15:45:45 ]
- いい加減、誰かファイルディスクリプタの説明してやれよw
- 651 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 15:47:52 ]
- >>647
そっちの方がいいですか? スレッドとネットワークと Linux が混ざった疑問なのでどこがいいのか迷ったんですが。
- 652 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 16:00:17 ]
- >>640>>650
pthread_createで作ったスレッド間では、ファイルディスクプリタは共有されます。 すなわち、同じ数値=同じソケット端点。 何がいいたのか知らんがこれでいいか?
|

|