越水です。

From: Tomoyuki Kosimizu <greentea / fa2.so-net.ne.jp>
Subject: [ruby-list:20456] Re: thread in loop
Date: Thu, 3 Feb 2000 01:55:11 +0900

> アレッと思って考え直したのですが、やっぱり他に書きようがありません。例
> のコードでいえば、スレッドは必ず10個(mainスレッドを入れれば11個)生
> 成されるはずで、そうならば、各スレッドのth_iは、1から10までの連続し
> た値になるはずです。

やっぱ、間違ってましたね。スレッドは必ず10個生成されますけど、th_iが
1から10までの連続した値になるかどうかは理論的には非決定的です。

Thread.newで生成されたスレッドの中で`th_i = i'が評価される前に、mainス
レッドのループが回る可能性が理論的にはあるわけで、そうなると、各スレッ
ドのth_iの値は、2, 2, 3, ...のようになる可能性があるわけです。

とはいえ、Thread.newによって、生成されたスレッドがメイン=スレッドに取っ
て代わって実行されることは、今のrubyの実装では保証されていますし(よね?)、
例のコードでは`th_i = i'の前にスレッド切り替えイベントが起きることもな
いので、`th_i = i'の前にメイン=スレッドに制御が移ることは100%ない
といえます。

ただし、クリスさんが書かれているように、`th_i = i'の前にsleepなどを置
くと、メイン=スレッドに切り替わる可能性があるので、危険な状況になりま
す。

越水(やっぱりダメダメ)
greentea / fa2.so-net.ne.jp