なかだです。

At Thu, 13 Jan 2000 17:44:30 +0900,
Yasushi Abe (阿部靖司)  <yasushi / stbbs.net> wrote:
> ところがこれを実行すると、
> >Thu Jan 13 17:32:42 GMT+9:00 2000
> >1 sec sleep    Thu Jan 13 17:32:43 GMT+9:00 2000       #<Thread:0xa066900>
> >2 sec sleep    Thu Jan 13 17:32:44 GMT+9:00 2000       #<Thread:0xa0668a0>
> >3 sec sleep    Thu Jan 13 17:32:45 GMT+9:00 2000       #<Thread:0xa066840>
> >4 sec sleep    Thu Jan 13 17:32:46 GMT+9:00 2000       #<Thread:0xa0667e0>
> >5 sec sleep    Thu Jan 13 17:32:47 GMT+9:00 2000       #<Thread:0xa066780>
> >5 sec sleep    Thu Jan 13 17:32:48 GMT+9:00 2000       #<Thread:0xa066900>
> >5 sec sleep    Thu Jan 13 17:32:49 GMT+9:00 2000       #<Thread:0xa0668a0>
> >5 sec sleep    Thu Jan 13 17:32:50 GMT+9:00 2000       #<Thread:0xa066840>
> となってしまいます。
> Thread:0xa066900は1秒だけ停止するスレッドになると思っていたのですが。

> #!/ruby/ruby
> 
> require "thread"
> 
> def s(a)
>   sleep(a)
>   print a," sec sleep\t",Time.now,"\t",Thread.current,"\n"
> end
> 
> t = []
> 
> print Time.now,"\n"
> 
> for i in 1..5
>   t[i] = Thread.start {
>     loop do
>       s(i)
>     end
>   }
> end

  これだと、スレッド間で i を共有していることになります。こうして
みてください。詳しくは Ruby 本 p.334。

    j = i
    loop do
      s(j)
    end

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦