From: Minero Aoki Date: 2000-07-08T18:26:44+09:00 Subject: [ruby-list:23745] Re: TCPServer & Thread あおきです。 In mail "[ruby-list:23744] Re: TCPServer & Thread" nosuzuki@e-mail.ne.jp (Norio Suzuki) wrote: > こんにちは。鈴木教郎です。 > > Thread::new do > > s3 = S2 > だとどうでしょうか? 私のサンプルコードには、s3 = S2 に相当するコードが > 入っています。なぜこれが必要かは、理解できていません。 ブロック内で初出の変数に代入するとブロック内ローカル (==スレッドローカル) になるからです。だから逆に言えば、これが抜けるとまずいですね。 さらに考えると、 s = srv.accept Thread.fork { # この thlocal_s = s # 二行の間 でスレッドのスケジューリングが起こるとやっぱり困る。 というわけで、以前出た中田さんのパッチがあたってれば Thread.fork( srv.accept ) {|thlocal_s| s.read と書けて安全になるわけです。 これは 1.5 からでしたっけ? ------------------------------------------------------------------- あおきみねろう