From: Yukihiro Matsumoto Date: 2007-03-17T22:52:08+09:00 Subject: [ruby-dev:30619] Re: stdout flush in fork まつもと ゆきひろです In message "Re: [ruby-dev:30616] Re: stdout flush in fork" on Sat, 17 Mar 2007 17:58:58 +0900, keiju@ishitsuka.com (石塚圭樹) writes: | |けいじゅ@いしつかです. | |In [ruby-dev:30614] the message: "[ruby-dev:30614] Re: stdout flush in |fork", on Mar/17 16:38(JST) Yukihiro Matsumoto writes: | |>まつもと ゆきひろです | |>|rb_fork をみてみると, flush してから forkするまでの間に他のスレッドが |>|再度STDOUTなどに書き込みを行う可能性がないではないと思うのですがどうな |>|んでしょう? |> |>その可能性はあると思いますが、問題ではないのでは? |>問題なのは「flushされないこと」であって「flushが多いこと」は |>さほど問題にならないように思いますが。 | |STDOUTにflushしたあと, forkする前に, 他のスレッドが, STDOUTに書き込むっ |てことは STDOUTがflush されていないことになるとおもうのですが? あれ? ちょっと調べ直してみました。 rb_fork()がrb_f_fork()から呼ばれる場合にはrb_thread_atfork() の呼び出し後ですから、他のスレッドは存在しないとみなしてよい と思います(YARVではテーブルから削除するだけで実際にスレッド を止めるようにしてないみたいだけど)。だから問題なし。 それ以外でrb_fork()を直接呼んだ場合には、他のスレッドはまだ 生きているわけですから、そちらでいずれflushされるでしょう。