越水です。 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