core/thread_group.rb
class ThreadGroup
def initialize
@threads = []
@enclosed = false
end
private :initialize
Default = ThreadGroup.new
def add(thread)
if g = thread.group
raise ThreadError, "can't move from the enclosed thread group" if g.enclosed?
gm = Rubinius::Mirror.reflect g
gm.remove thread
end
tm = Rubinius::Mirror.reflect thread
tm.group = self
Rubinius.synchronize(@threads) { @threads << thread }
self
end
def list
@threads
end
def enclose
@enclosed = true
self
end
def enclosed?
@enclosed
end
end