Feature #15954
closed簡単にマルチスレッドを一度に合流させる
Description
現在いるスレッド以外の全てのスレッドを現在のスレッドに合流させたいときは多いと思います。
その場合、一つの方法は、スレッドを生成するときにそれらを配列に蓄えておき、あとでその配列の各要素のスレッドに対してjoin
をすることですが、そのためにわざわざスレッドを配列に蓄えておかなければならないのは、若干手間で無駄かなと思います。
それを回避する方法として、私の思いつく限りで単純な方法は次のようなものです。
Thread.list.each{|t| t.join unless t == Thread.current}
しかし、ここでは現在のスレッドを合流の対象から除く条件式を入れる必要があるためにエレガントでありません。そこで、Thread.list
から現在のスレッドを除いた配列を返すメソッドを希望します。これはDir.entries
だと不要なピリオドファイルが含まれる不便さからDir.children
が作られたのと同じ発想です。
あるいは、一歩進めて、Thread.join_other_threads
のような感じで現在のスレッド以外の全てのスレッドを一気に合流させるメソッドがあってもよいと思います。
Updated by matz (Yukihiro Matsumoto) almost 6 years ago
- Status changed from Open to Rejected
ライブラリでスレッドを作ったりしている可能性もあるので「自分以外全部join」はマズいんじゃないかなあと思います。
Since required libraries may create threads inside, joining other threads altogether could cause problems.
What do you think?
Matz.
Updated by sawa (Tsuyoshi Sawada) almost 6 years ago
matz (Yukihiro Matsumoto) wrote:
ライブラリでスレッドを作ったりしている可能性もあるので「自分以外全部join」はマズいんじゃないかなあと思います。
Since required libraries may create threads inside, joining other threads altogether could cause problems.
What do you think?Matz.
確かにそうでした。現在のファイルで作られたスレッドなどの制限を付ければいいのかな。良さそうな考えが浮かんだらまた出直します。
Updated by nobu (Nobuyoshi Nakada) almost 6 years ago
- Related to Feature #5958: ThreadGroup#join added