From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2007-03-15T12:41:35+09:00 Subject: [ruby-dev:30587] Re: help: lib/shell for ruby 1.9 けいじゅ@いしつかです. In [ruby-dev:30585] the message: "[ruby-dev:30585] Re: help: lib/shell for ruby 1.9", on Mar/15 12:10(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|こんどは, lib/shell を ruby 1.9(YARV)に対応しようと思っているのですが, >|Thread.criticalを多用しているので, どうしたもんだかと悩んでします. >確かに。 >えーと、まず第一にThread.criticalを使えばコンテキストスイッ >チが起きないと言うのは誤解です。Thread.criticalはタイマーに >よる切り替えを禁止するだけで、どこかで明示的なスレッド切り >替えが発生することを止められません。ということは、最初のコー >ドはもともと期待するほどには安全では無かったということなのだ >と思います。 うーむ. たしかにそうだったのかも知れません... >なお、chdirに関してはDir.chdirをブロック付きで呼ぶという技が >使えると思います。 > > Dir.chdir(@shell.cwd) do > @files = Dir[patter] > end これって, thread safe です? ちがいますよね? >残念ながらumaskには同様の手段が用意されていません。そもそも >プロセス単位の概念をスレッド単位に見せかける時点で相当無理が >あるわけですが。 まあ, たしかに. というか, 1つのプロセス(コマンドごとに)3つのスレッドが 立ち上がるので, それがまた話を複雑にしているのですが... いまは, 2つのmutexを用意してとりあえずshell管理以下のthreadに関しては 制御しようとしています. んで, shell管理以外のスレッドに関しては, その mutexを用いたインターフェイスを用意し, 必要であれば排他制御をしてもら おうと考えています. こうすればとりあえず回避策はあることになるので, shell.rb の使い方から 言って, あまり問題になることはないかなと考えています. とはいえ, なかなかデバッグが進んでいませんが... >|それともう一つ, forkした後の子プロセス側のスレッドはどうするようになり >|ましたっけ? だいぶ前の版からkillするようになった気もしているのですが? > >1.8ではforkした以外のスレッドは全部死にます(でもOSXでは動か >ないとか [ruby-dev:30581])。trunkでどうなのかはちょっと今は >分かりません。 了解. でも, 動かないって言うのはどういう意味です? とりあえず, ruby-1.8系でテストしています. Mutex#sleepを使わなければ, インターフェイス上は互換性とれるはずですので. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---