ごとけんです

In message "[ruby-list:20453] thread in loop"
    on 00/02/02, Yoshiki Wada <wada / wombat.or.jp> writes:

>スレッドをループの中に入れて、こんな風に使っています。
>
>  for i in 1 .. 10
>    ...
>    Thread.start do
>      th_i = i	# (A) スレッドローカルな変数にコピー
>      ...
>    end
>    ...
>  end
>
>(A)の部分のth_iには、そのスレッドが始まった時の
>iの値を代入したいのですが、タイミングによっては
>forループが先に進んでしまったりしないでしょうか。
>
>正しい書き方があれば教えてください。

真相は知らないのですが、安全策として次のようなのはどうでしょ
う??  スレッドローカルでない変数が一つ出来ちゃいますが。

  for i in 1 .. 10
    ...
    _ ||= i     # _ が未定義またはnilのときのみiを代入
    Thread.start do
      th_i = _	# (A) スレッドローカルな変数にコピー
      ...
    end
  end

-- gotoken