From: matz@... (Yukihiro Matsumoto) Date: 2001-04-10T13:40:45+09:00 Subject: [ruby-dev:12840] Re: recursive malloc / fork deadlock / thread deadlock まつもと ゆきひろです In message "[ruby-dev:12836] Re: recursive malloc / fork deadlock / thread deadlock" on 01/04/10, nobu.nakada@nifty.ne.jp writes: |> * rb_trap_immediateを使わずIOをnon blockingモードにするこ |> とで、ブロッキングを避ける |> |> EWOULDBLOCKに対してstdioがどう反応するかバラツキがありそ |> うだなあ。 | | なんか結局 stdio を捨てることになりそうな…。 捨てるんだったらこんな面倒なことはしません。バラツキがなけれ ば使えるなあというアイディア。 |> * read(2)をオーバライドする。実際の呼び出しはsyscallを使う。 |> |> syscallのないプラットフォームではどうするか。 | | getc() で TRAP_BEG/TRAP_END せずに syscall の間だけ割り込みを |許可するということですか? そういうこと。Pthスレッドライブラリはこの手を使ってます。 Cygwinでも動くみたいだけど、Win32では別の手を使わないとね。 やっぱりstdioを捨てることになるのか。 |> なかなか難しい。 | | * thread 関連を分割して、pthread 対応できるようにする | (configure で選択)。 | | 完全にマルチスレッドにするには書き直すところが多すぎるので、 | コンテクストスイッチと排他制御だけ pthread を使ってスケジュー | リングは自分でする。 | |というのも考えたんですが、もっと大変そう。 ちょっとピンと来ませんでした。スケジュールを自分でするとは Pythonみたいにグローバルロックを導入するってこと? それはGC の問題を解決してからでないと。 まつもと ゆきひろ /:|)