From: "mame (Yusuke Endoh)" Date: 2012-11-20T21:10:20+09:00 Subject: [ruby-core:49686] [ruby-trunk - Feature #5788] Thread#at_exit Issue #5788 has been updated by mame (Yusuke Endoh). Target version set to next minor ---------------------------------------- Feature #5788: Thread#at_exit https://bugs.ruby-lang.org/issues/5788#change-33207 Author: Glass_saga (Masaki Matsushita) Status: Feedback Priority: Normal Assignee: Category: core Target version: next minor =begin I propose a new method Thread#at_exit. It is to register a block which will be called when the thread ends. p Thread.main #=> # p t = Thread.new{ # do something } #=> # t.at_exit{ p Thread.current } t.join #=> # Thread.main.at_exit is equal to Kernel.at_exit. I think this method is useful for waiting plural running threads end. Without Thread#at_exit: t1 = Thread.new{ sleep 1 } t2 = Thread.new{ sleep 2 } [t1, t2].each do |t| Thread.new do t.join puts "Thread ended!" end end [t1, t2].each(&:join) To handle threads' end immediately, the same number of threads as ones to wait is needed. For example, Ruby's standard library thwait.rb does so. With Thread#at_exit: t1 = Thread.new{ sleep 1 } t2 = Thread.new{ sleep 2 } [t1, t2].each do |t| # It runs when interpreter ends. t.at_exit{ puts "Thread ended!" } end New threads are not necessary. I made a patch. Patched ruby passes test-all. =end -- http://bugs.ruby-lang.org/