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


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

pthread地獄 part 2



1 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/12/20(水) 22:11:47 ]
Posixな糸に群がる亡者どものスレ。地獄の底でsage進行。
徳の高い人はpthread天国でも可。
■前スレ
 pthread地獄
 pc8.2ch.net/test/read.cgi/unix/1010933537/

134 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/25(金) 12:57:45 ]
> スレッドモデルで同じことを実装することは可能なのか?

想定しているのがSIGSEGVやSIGILLのようなプログラムロジックの
バグである限り、不可能というのが答。
プロセスには、スレッドに比べて、メモリ空間が分離されていて
SIGSEGVやSIGILLのような誤動作の影響を完全に排除できるという
特徴がある。つまり、まさにプロセスの利点に当てはまるケースな
わけで、このような想定状況で、スレッドにプロセスと同等の信頼性
を求めることはできない。


> こういったプログラムは同期シグナルとどうやって折り合いをつけて
> いるんでしょうか。

バグが原因で発生するシグナルは別として、sigwait() で対処するのが常識。

135 名前:93 mailto:sage [2008/07/25(金) 13:40:09 ]
>>134
そっか。
やっぱりそうなんですか。

非同期シグナルであれば、シグナル受け専のスレッドを立てておいて、そこで
sigwait()するってのは判るんですが、同期シグナルはsigwait()では待てないですもんね?
ん?待てるのか?
ちょっと試してみる。
でも、待てたとしても、どのスレッドがその同期シグナルを発生させたかって、シグナル受け専
スレッドで判らないけりゃどうしようもないですし。



136 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/26(土) 12:58:41 ]
悪いこといわねえだ。signal扱いたいならprocess村に帰った方がええ。

137 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/26(土) 17:23:08 ]
つ libevent

138 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/26(土) 19:24:07 ]
libevent はマルチスレッド環境でも安全に使う方法があるってだけで、
それ自体がスレッドセーフな作りになってるってわけじゃなかったはず。

139 名前:93 mailto:sage [2008/07/29(火) 10:32:25 ]
とりあえず、やってみました。(Solaris10 x86です。)
ボス側で全てのシグナルをブロックし、シグナル受信専用スレッドを作成し、そこでsigwait()。
ワーカースレッドでSGISEGVを発生させるために、NULLアドレスに書き込み。
結果は、プロセスごと終了。
同期シグナルは発生元のスレッドに送られるのでシグナル受信専用スレッドでsigwait()していても
捕まえる事が出来ないってことですね。

同期シグナルは、ワーカースレッド側でsigset()して、シグナルハンドラ側でボスに >>125 すれば、
とりあえずハンドリングは出来ますが、 >>127 にもあるように、どこまで動くのかは不明ですね。

>>134 にもあるように、この辺りがマルチスレッドと、マルチプロセスの差という事なんですね。

そもそもスレッドってなに?、スタックとスレッドの関係って?、プロセスとスレッドの関係って?
OSはスレッドをどう認識してるの?
なんてことが判っている人にとっては自明なんでしょうが、私にもようやくこの辺りが判って来た
様な気がします。

なかなか使いどころが難しいですが、面白い仕組みですね。


140 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/30(水) 21:16:41 ]
シグナルのことを考えるとunixでスレッドをモリモリ使うのはキツい。角度とか。

141 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/08/09(土) 19:15:44 ]
あと、子プロセス生成(fork)も相性が悪くて、深い悲しみに包まれた。

142 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/08/09(土) 20:02:32 ]
マルチスレッドプログラミング→排他漏れ続出→永遠とバグが取れない→いくえ不明



143 名前:名無しさん@お腹いっぱい。 [2008/08/09(土) 20:41:21 ]
俺はマルチプロセスを使い手なんだが相手が残念な事にスレッドを使ってきたので「お前それで良いのか?」と言うと「何いきなり話かけて来てるわけ?」と言われた。
俺の弟がスレッドの熟練者なのだがおれはいつも勝つから相手が気の毒になったので聞いただけなんだがむかついたので「お前シグナルでボコるわ・・」と
言ってmain直後に力を溜めてkillしたら多分リアルでビビったんだろうな、、pthread_sigmaskしてたからサスペンドしてカカッっとforkしながらkillしたらかなり青ざめてた
おれは一気にlongjmpしたんだけどスレッドが硬直してておれの動きを見失ったのか動いてなかったからコマンド投下で排他を崩した上についげきのデッドロックでさらにダメージは加速した。
わざとセマフォをとり「俺はこのままタイムアウトでもいいんだが?」というとようやく必死な顔してなんかコードのはしっこからブロック型システムコール出してきた。
おれはselectで回避、これは一歩間違えるとカウンターで大ダメージを受ける隠し技なので後ろのギャラリーが拍手し出した。
俺は「うるさい、気が散る。一瞬の油断が命取り」というとギャラリーは黙った
スレッドは必死にやってくるが、時既に時間切れ、スタックガードを固めた俺にスキはなかった
たまに来るスタックガードでは防げない攻撃もexitで撃退、終わる頃にはズタズタにされたメモリ空間のcoreがいた

144 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/08/10(日) 03:35:51 ]
MTは処理効率も応答性もいいのでプログラマからは良くたよりにされる
だがたよりにされたいからMTに分けてもダメだと言う事が最近わかった
MTに分けるのは真にMTの問題だから処理を分けたくて分割するんじゃない
分かれてしまう処理がMT
GUIはざんねんがはっきりいってmutexはつかわないしAPIもMT-unsafeとかイマイチだから信頼されにくい

145 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/08/15(金) 13:04:59 ]
これ以上スレッドを作るなよ
プロセスはお前等のためにメモリ空間提供してやってるんだからな
プロセスが終了すればすぐ死ぬくせに調子こき過ぎ
あまり調子に乗ってると裏世界でひっそり幕を閉じる

146 名前:名無しさん@お腹いっぱい。 [2008/10/09(木) 04:28:39 ]
hosyu






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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