pthread地獄 part 2 (232レス)
上下前次1-新
1: 2006/12/20(水)22:11 AAS
Posixな糸に群がる亡者どものスレ。地獄の底でsage進行。
徳の高い人はpthread天国でも可。
■前スレ
pthread地獄
2chスレ:unix
2: 2006/12/20(水)22:22 AAS
2GET
3: 2006/12/21(木)18:16 AAS
4さま
4: 2006/12/21(木)18:21 AAS
次スレいらんって言ってたのに……。
5: 2006/12/21(木)19:21 AAS
並列プログラミング一般にしてしまえ。
6: 2006/12/21(木)21:37 AAS
マルチスレッドと並列は同じじゃないべさ
7: 2006/12/21(木)23:19 AAS
並行プログラミング
8: 2006/12/22(金)21:08 AAS
段違い並行プログラミング
9: 2006/12/22(金)21:12 AAS
リンダ・リンダ・プログラミング
10: 2006/12/24(日)11:14 AAS
どぶねーずみ、みたいに
11(1): 2006/12/24(日)13:50 AAS
(´▽`)
(σσ ヘイ! Let's プログラミング!
< <
12: 11 2006/12/24(日)13:58 AAS
よし。
13: 2006/12/24(日)15:36 AAS
pthreadってもう廃れるんですかね。ってか廃れてるんですかね
14: 2006/12/26(火)18:58 AAS
枯れるではなく廃れてるってこと?
15: 2006/12/31(日)02:22 AAS
Boost::threadってUNIX系ではpthread使ってなかったっけ?
16: 2006/12/31(日)15:07 AAS
UNIXといってもいまやいろいろあるし・・・犬糞とか
商用と非商用に分けて語ろうぜ
17: 2007/01/23(火)00:54 AAS
未だに Windows で pthread_kill() をどうやっていいのかわかんない。
って、Windows では使えないんだったけ…。
なんかそれも混乱してわかんなくなってきた…。
18: 2007/01/23(火)10:18 AAS
POSIX Parallel Programming, Part 3: Threads
http://www.informit.com/articles/article.asp?p=686610&rl=1
19: 2007/03/16(金)23:19 AAS
OpenMPな人は何処へ行けばいいのかしらん。。。
せっかくDual Core や Quad Coreが個人でも利用できる時代になったのにい。。。
20: 2007/03/16(金)23:45 AAS
ム板池
21(1): 2007/05/14(月)00:15 AAS
http://lists.freebsd.org/pipermail/cvs-src/2007-May/078202.html
> Change the default thread library to libthr.
FreeBSDのデフォルトスレッドライブラリも1:1のものに変更されました。
22(1): 2007/05/14(月)07:21 AAS
>>21
n:mはつかえないということなの?
23: 2007/05/15(火)00:00 AAS
>>22
今までのM:Nスレッドライブラリはlibkseという名前で残っているから
シンボリックリンクを張り替えるなどすればいい。
libkseは少なくとも7.x系までは生き残るだろうけど、
8-currentあたりで消されそうな気もする。
24: 2007/05/15(火)10:04 AAS
libmap.conf じゃ駄目なのか?
25: 2007/05/16(水)07:27 AAS
つかえないというのは
いいところなしというつもりでした。
複雑な制御の割に性能が出ないのでしょうか。
Solarisも1:1になったし。
26: 2007/05/16(水)07:42 AAS
前スレで擁護してた奴の言い訳が聞きたいところだが…
27: 2007/05/22(火)08:02 AAS
javaみたいにスレッドをCPU数に関係なくたくさんつくるやつの性能も1:1で満足できるのか知りたい。
28: 2007/06/10(日)00:00 AAS
言い訳よりも、ベンチの結果とかが欲しいね。
Apache (worker) + DB とかの。
29: 2007/06/11(月)15:38 AAS
SunStudio11や12もいいよ。
何せ無償だし。OpenMPもあるでよ。
30: 2008/03/13(木)00:37 AAS
Remove kernel support for M:N threading.
http://lists.freebsd.org/pipermail/cvs-src/2008-March/088489.html
31: [!sage] 2008/03/13(木)10:41 AAS
このスレ忘れてた…
32: 2008/03/13(木)16:53 AAS
いまやpthreadを生で使うことはほとんどないからなぁ。
33: 2008/03/18(火)11:07 AAS
純粋に興味があるんだけどpthread以外って何使ってる?
34(1): 2008/03/18(火)22:18 AAS
javaのスレッド
最近はjava.util.concurrentがあるからね。
35: 2008/03/19(水)18:46 AAS
>>34
1.5の時はメモリリークに悩まされました>concurrent周り
36: 2008/06/06(金)15:37 AAS
mutexを使って資源の共有ではなく、単にスレッド間の同期を取りたいのですが、
デッドロックしないようにするにはどのように書けばよいのでしょうか?
37: 2008/06/06(金)15:46 AAS
pthread_barrier_waitがあるのにmutexが使いたいと申すか
38(1): 2008/06/09(月)15:07 AAS
たくさんのthreadをpthread_create()で作成する場合、
作成した子スレッドへの引数ってどうやって渡せば良いんでしょうか?
for (narg = 0; narg < 100; ++narg) {
nrc = pthread_create(&t1, NULL, tfunc, (void *)&narg);
}
こんな感じで渡そうとしたんですが、作成された子スレッド(tfunc)側で
引数を使おうとすると、親スレッド側でどんどん値がインクリメントされて
いってしまいます。(並列に動いてるんだから当然なんでしょうけど。)
39(1): 2008/06/09(月)15:34 AAS
値そのものをパラメータとして(void *)にキャストして渡す、
もしくはスレッド数分の配列に格納してその要素へのポインタを渡す。
というか、あなたはまだマルチスレッドプログラミングに手を出すのは早い。
そんなんではデバッグも満足にできないから、
基礎をしっかりやってからの方が近道。
40(1): 38 2008/06/09(月)16:06 AAS
>>39
レスTHX
>もしくはスレッド数分の配列に格納してその要素へのポインタを渡す。
やってみたら、ちゃんと渡りました。
この時に確保しておくスレッド数分の配列って、ヒープにとるもの?
それとも、親スレッド側のスタックにとるもの?
それとも、グローバル変数もしくはスタティック変数としてとるもの?
それとも、ケースバイケース?
子スレッド実行中にそのエリア(子スレッド用の引数エリア)が開放
されなければ良いと思うんだけど、親スレッド側のスタックにとった
場合ってどうなるんでしょうか?
親スレッドは子スレッドがすべて終了するまで存在するとした場合、
親スレッド側のスタックにとったエリアを子スレッドへの引数エリアと
して使用するのはOKでしょうか?
>基礎をしっかりやってからの方が近道。
今が基礎のつもりです。
41: 2008/06/09(月)22:05 AAS
このスレのタイトルは上手く考えられているな。
pthread_createでスレッドに渡す引数の渡し方を人に聞くというのは、
地獄に入口から一歩入ったところで、番犬ケルベロスに向かって
「この先にお弁当屋さんはありますか?」と聞いているような、不思議な感じが醸し出される。
>>40
実際のメモリマップを想像すれば、答えは自ずとわかる。
MTは単一のプロセス空間内でPCとスタックを複数切り替えるだけで、マジックはない。
42: 2008/06/10(火)12:24 AAS
void*に入るなら、キャストして渡した方が後のこと考えないで良いから楽ちん。
親のスタックに取ったら、その寿命考えないといけないから面倒。
個別にヒープにとってアドレス渡して、その領域の後片付けも子スレッドがすれば良いんじゃない。
場合によっては、1スレッドに必要な領域*スレッド数をまとめて取って、
子スレッドがすべて終了したら、親がまとめて捨てても良いと思うけど。
43(1): 2008/06/11(水)02:48 AAS
pthreadsなんで単純なsleep/wakeupインターフェースないのん?
44: 2008/06/11(水)23:36 AAS
>>43
mutexを直前まで持ったままsleepできないとwakeupの取りこぼしがおこるから。
基礎から勉強しなおしてね
45: サカムラ・アントワネット 2008/06/12(木)02:15 AAS
とりこぼしちゃまずいなら、μITRONのwup_tskみたいにキューイングすればいいじゃない
46: 2008/06/12(木)11:27 AAS
それ何てセマフォ?
47: 2008/06/13(金)08:46 AAS
キャンセルができるみたい。
48: 2008/06/17(火)10:56 AAS
マルチスレッドプログラミングに関する書籍で良書と言われている
ものってどんなものがあるんでしょうか?
この本は良いよってのがあれば紹介して頂けると嬉しいです。
49: 2008/06/18(水)15:55 AAS
Patterns for Parallel Programming
50: 2008/06/19(木)13:50 AAS
CSPモデルの理論
51: 2008/06/19(木)15:27 AAS
javaだけど
Java並行処理プログラミング
Doug Leaも書いてる
52(2): 2008/07/09(水)22:12 AAS
外部のカウンタ変数をひとつ用意して、
複数のスレッドで、それをインクリメントするだけのときも
mutex使った方がいいのでしょうか。
53: 2008/07/09(水)23:01 AAS
extern int i;
foo() {
...
i++; /* is it atomic? *?
...
}
が atomic operation かどうかは処理系による。
++/-- だけなら mutex よりも semaphore の方がいい気がする。
cf. sem_init(3)
54: 2008/07/10(木)00:29 AAS
>>52
IA32ですら、その手のことをアセンブリ言語レベルで正しく実装する場合に
LOCKプレフィクス付きでインクリメントしなきゃならなかったりする。
何らかの排他制御は必要。
55: 2008/07/10(木)01:52 AAS
volatileで十分w
56: 2008/07/10(木)12:09 AAS
インクリメントするのが一人なら確かに十分。
mutexはまあ確実だけど、性能の要求によってはspinとかrwlockとか。
semaphoreは、規定回数処理するっていうならいいけど、
回数が分からない場合どうするの?
57: 2008/07/11(金)10:19 AAS
冗談なのか何なのか知らないがインクリメント対象に volatile なんて付けたら
read-modify-write なコードになると思うんだが。
58: 2008/07/11(金)23:36 AAS
cond_timedwaitがシステム時刻を要求するのは問題があると思うけど、
少なくとも日本語ではそういう情報が見当たらない。
wait中にシステム時刻が変更されたらどうなるんだろう。
どう考えてもSUNのcond_reltimedwait_npみたいなのが標準化されるべきだと
思うけど、そういう動きはないんだろうか。
標準のtimedwaitでどうエミュレーションしてもバグの潰し様が無いはず。
59(1): 2008/07/12(土)01:40 AAS
相対値はそれはそれでまずいんだよ。
標準はなんも考えずにシステムクロックを採用してるわけじゃなくて、
あれはあれでちゃんと角度とか考えられてるんだ。
http://www.opengroup.org/onlinepubs/000095399/functions/pthread_cond_wait.html
のRATIONALE読んでね。
60: 2008/07/12(土)05:25 AAS
読んだ。
>a relative time measure can be easily implemented
on top of a function that specifies absolute time
ダウト。任意のタイミングによるシステム時刻変更を考えれば
これが実装できないから問題にしている。
現在時刻取得 -> timespec変数にタイムアウト値加算
-> timedwait()に渡す -> wait中
全ての過程で競合が発生するだろ?
時間が進むことでタイムアウトが早く発生するのはまあ、対処できる。
(無駄にコードが複雑になるけど。)
しかし、時間が巻き戻ると、タイムアウトの発生が遅れてしまう。
制御が戻らないことには何もできない。
異常時に即座に実行しないといけない処理が遅れてしまう。
61(2): 2008/07/12(土)05:26 AAS
さらに、逆のパターンの実装は競合が発生するという主張について、
> clock_gettime(CLOCK_REALTIME, &now)
> reltime = sleep_til_this_absolute_time -now;
> cond_relative_timed_wait(c, m, &reltime);
> If the thread is preempted between the first statement
> and the last statement, the thread blocks for too long. Blocking,
> however, is irrelevant if an absolute timeout is used.
これもよく分からん。
このコードの間のプリエンプトが問題になるハードリアルタイムシステムなら
リアルタイムOS使わないと無理じゃないの?
まあ、絶対時刻指定のAPIが要らないとまでは云わない。
> An absolute timeout also need not be
> recomputed if it is used multiple times in a loop
これもダメ、システム時刻の変更があり得る状況では、
システム時刻によって、ある時点から何秒経過したか知ることはできない。
タイムアウト内で、条件成立前にシグナルされる可能性がある場合、
俺の場合は、仕事ではWindowsなので、GetTickCount()を使い、
システム起動からの経過時間を元に次のタイムアウト指定値を求める。
Unixならプロセスの使用時間を取得できるAPIがあったはず。
62(2): 2008/07/12(土)12:20 AAS
> 時間が巻き戻ると
そんな運用しないのが前提じゃないのか。
普通は進み方を遅らせて徐々に合わせるか、一気に合わせるなら
シングルユーザモードもしくは他にそのへんに敏感なプロセスが
動いていないときにするものだと思うが。
63: 52 2008/07/12(土)12:26 AAS
返事が遅れました。
やはり何らかの制御が必要ということですね。
みなさん、ありがとうございました。
もっと勉強してきます。
64(1): 2008/07/12(土)13:38 AAS
>>62
そういう常識?が通用する業界もあるんだ。
言いたいことはわかるけど、pthreadなんぞ知ったこっちゃない
オペレータやユーザにそんな制限かけられないことが多いのでは?
全然別のこと担当してる同じマシン上のプログラムに制限かけたり
こっちから監視したりとかも無理な相談だなあ。
これがもしも、普通の個人がPCで使うソフトなら、
どのプログラムがpthread使ってるとか関係なく、
好きなときに時刻の調整くらいするよね?
65(1): 2008/07/12(土)13:47 AAS
>>61
お前みたいな奴が、cond_relative_timedwait()で1秒って指定したのに
1.1秒で復帰してきた!クソが!って怒るから絶対時刻にしたんだよ。
pthreadsの待ちの時間の正確性なんて信頼できないんだから、この点について
議論してもあまり意味ないと思う。
66: 2008/07/12(土)15:53 AAS
>>65
信頼できない、のレベルによるな。
俺の仕事では1秒以下のズレは全然許容できるレベルだな。
それ以下はリアルタイムOS使う世界だと思う。よく知らんけど。
タイムアウト1秒に指定しても、制御戻るのは1分後かも・・・なんてのは全く話にならない。
67: 2008/07/12(土)16:52 AAS
>>64
だから、通常の運用だと ntp がゆっくり時間補正するようになっている。
>>62 の後半は例外的な運用だろ。
# 知識, 理解力, 謙虚な心 の全てが欠如してると今後辛いぞ。
68(3): 2008/07/12(土)18:13 AAS
そりゃ、運用や通信プロトコルまで口出しできりゃ、なんでもできる。
あんまり具体的な例挙げても仕方ない気がするが、
半導体業界の某標準プロトコルで、工場のホストから受け取った時刻に
工場内の装置(OSは普通Windows)が問答無用で同期することは普通に行われている。
Linuxに移行したいとか軽率に言い出されるとやばいと思う。
時刻なんて人間に表示するためのもので
制御プログラムとかが依存していいもんじゃないと思うんだが。
69: 2008/07/12(土)22:25 AAS
>>68はまるで自分の業界がスタンダードで世界中がそれを基準にすべきと
いわん勢いだけど、それが根本的に噛み合ってないといいかげんに気付いたらどうよ。
70: 2008/07/12(土)23:03 AAS
>>68
そう言う特殊な要件があるなら、それに合うように作ればいいだけ。
ホストの時刻に影響されたくなければ、システム時刻とホストから受け取った
時刻を別々に管理するとか、やりようはいくらでもあるだろ。
71: 2008/07/12(土)23:41 AAS
俺のためにみんなが喧嘩するのはもうたくさんだ
72: 2008/07/13(日)01:28 AAS
>>68
なんだ、ただのシッタカだったのか、お前。
73: 2008/07/14(月)12:27 AAS
> 半導体業界の某標準プロトコルで、工場のホストから受け取った時刻に
> 工場内の装置(OSは普通Windows)が問答無用で同期することは普通に行われている。
自分で書いているように、それはパソコン系の「普通」であって、
UNIX界隈の人間がその種の運用をすることは100%有り得ないから、
時刻が急に巻き戻ってタイムアウトまで1秒のはずが61秒かかっちゃったりする心配を
あなたがする必要はない。
もしプロトコル上、工場のホストと同期する必要があれば、
システムクロックを変更するのではなく、
アプリケーションの実装でシステムクロックとリモートホストのクロックの差を管理する。
このようにUNIX系へ移行するとしてもちゃんと問題なく出来るから、
あなたは心配しなくてよい。
74(1): 2008/07/14(月)12:45 AAS
POSIXがatomic increment/decrementをAPIとして規定しなかったのはなぜ?
mutexがあっても軽量なカウンタが不要になることはないわけで、
結局、みな独自に実装しているのだが。
75: 2008/07/14(月)13:53 AAS
ここで聞かずpthreadsのインタフェースを決めた人に聞いてください。
そういうAPIが必須ならプラットフォームを変えることを検討してください。
どうしてもpthreadsに必要ならpthreadsを変えるべく努力してください。
それもいやなら文句言わず今使えるもので実装しなさい。
76: 2008/07/14(月)14:56 AAS
知らないと一言書けば済むことをなぜ4行にも渡って
77: 2008/07/14(月)22:08 AAS
> アプリケーションの実装でシステムクロックとリモートホストのクロックの差を管理する。
俺が知りたいのは、特定の仕様のシステムを実現する方法じゃなくて、
他のプログラムが何していようが、
ユーザが好き勝手に時刻を変更しようが、
現在からN秒以内に条件が成立しなければ、アウトという監視は本当にできないのかってこと。
Pthread標準の枠内で。
時刻をいじってるプログラムと密に連携したり同期とれるとか、
そんなこと当てにできないし、したくもない。
78: 2008/07/14(月)23:00 AAS
ああ、わかった。
要は、pthread の仕様バグを見つけた俺を誉めてくれと言うことね。
「お前は、偉いよ。」
これで十分だろ、もう出てくるな。
79: 2008/07/14(月)23:55 AAS
だいたいUnixで「ユーザ」が時刻を好き勝手にいじれるわけねーだろ。
そういう権限を生身の人間に与えちゃってるとしたらその時点で頭おかしい。
80: 2008/07/15(火)00:26 AAS
> そういう権限を生身の人間に与えちゃってるとしたらその時点で頭おかしい。
ちょっ、お前ン所のサーバー管理者はロボットかよ !!
81: 2008/07/15(火)00:55 AAS
サーバ管理者が時刻を好き勝手にいじるような頭の沸いたサイトはどうにもできねーよ。pthread以前の問題。
82(1): 2008/07/15(火)01:49 AAS
>>74
POSIXで規定されなかった理由は知らんが、
C++0xではちゃんと Atomic operation や Memory barrier が
定義されるから安心しろ。
83: 2008/07/15(火)09:21 AAS
ちなみにWin32のWaitForMultipleObjectsは相対時間指定なので
>>59の"Timed Wait Semantics"に挙げられた問題が存在する。
>>61をみると理解できていないようなので、何が問題なのかわかるまで考えた方がよいだろう。
プロセスのプリエンプション自体が問題なのではないので、絶対指定のPOSIXにはこの問題はない。
84: 2008/07/15(火)09:25 AAS
>>82
Cで頼む
85(1): 2008/07/15(火)12:11 AAS
Cに入れるようなもんじゃないだろう。
pthread_xxx_npあたりでいいよ。
CASとかもセットで。
86: 2008/07/15(火)15:46 AAS
>>85
pthread_xxx_npあたりで頼む
87(1): 2008/07/18(金)10:56 AAS
Solaris10なんだけど、マルチスレッドのプロセスからコールされる
サブルーチンをコンパイルする時って、どんなコンパイルオプションを
付ければ良いんですか?
普通に、コンパイルして共有ライブラリを作ればよい?
このサブルーチンの中では、pthread_XXXはコールしていないので、
#include <pthread.h> もしてないんですがこれってダメ?
88: 87 2008/07/18(金)10:59 AAS
ちなみに、そのサブルーチンは複数のスレッドから同時に呼ばれても
大丈夫な様に作ってあります。
89: 2008/07/18(金)14:33 AAS
なにもいらないと思うけど。
引数だけで計算して値を返すとか、完全に状態に依存しないものならね。
90: 2008/07/18(金)15:12 AAS
Sun cc使ってる場合は-mtが必要になったりする。
http://docs.sun.com/app/docs/doc/819-0390/compile-94179?a=view
これは-D_REENTRANT -lthreadと等価なようだ。
gccであっても、使っているライブラリによっては、同様に何らかのシンボル定義が
必要になるかもしれない。
上下前次1-新書関写板覧索設栞歴
あと 142 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.013s