等待一个线程在Ruby中死掉

时间:2018-03-26 11:23:42

标签: ruby multithreading ruby-2.4 ruby-2.5

看来,在Ruby 2.4和2.5中,一旦你对它们调用#kill,线程就不会死掉。此代码段将打印 Not dead 几次:

thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?

我希望阻止主线程的执行,直到辅助线程被终止。我尝试使用thread.join.kill,但当然这会阻塞主线程,因为线程的循环永远不会终止。

如何在主线程继续之前确保线程被杀死?

2 个答案:

答案 0 :(得分:10)

想出来;杀死它后你仍然可以#join线程,所以你可以使用thread.kill.join来阻止线程死掉。

此代码永远不会打印 Not dead

thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?

答案 1 :(得分:0)

我正在这样做:

thread = Thread.new { loop {} }
thread.kill
sleep 0.001 while thread.alive?

这就是我终止ThreadPool中的线程的方式。