Project

General

Profile

Feature #15954

簡単にマルチスレッドを一度に合流させる

Added by sawa (Tsuyoshi Sawada) 3 months ago. Updated 3 months ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:93330]

Description

現在いるスレッド以外の全てのスレッドを現在のスレッドに合流させたいときは多いと思います。

その場合、一つの方法は、スレッドを生成するときにそれらを配列に蓄えておき、あとでその配列の各要素のスレッドに対してjoinをすることですが、そのためにわざわざスレッドを配列に蓄えておかなければならないのは、若干手間で無駄かなと思います。

それを回避する方法として、私の思いつく限りで単純な方法は次のようなものです。

Thread.list.each{|t| t.join unless t == Thread.current}

しかし、ここでは現在のスレッドを合流の対象から除く条件式を入れる必要があるためにエレガントでありません。そこで、Thread.listから現在のスレッドを除いた配列を返すメソッドを希望します。これはDir.entriesだと不要なピリオドファイルが含まれる不便さからDir.childrenが作られたのと同じ発想です。

あるいは、一歩進めて、Thread.join_other_threadsのような感じで現在のスレッド以外の全てのスレッドを一気に合流させるメソッドがあってもよいと思います。


Related issues

Related to Ruby master - Feature #5958: ThreadGroup#joinRejectedActions

History

Updated by matz (Yukihiro Matsumoto) 3 months 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) 3 months 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.

確かにそうでした。現在のファイルで作られたスレッドなどの制限を付ければいいのかな。良さそうな考えが浮かんだらまた出直します。

#3

Updated by nobu (Nobuyoshi Nakada) 3 months ago

Also available in: Atom PDF