8

看来,在 Ruby 2.4 和 2.5 中,线程不会在您调用#kill它们时立即死亡。此代码段将打印Not dead几次:

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

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

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

4

2 回答 2

11

弄清楚了; #join杀死线程后您仍然可以使用该线程,因此您可以使用thread.kill.join阻塞直到线程死亡。

此代码从不打印Not dead

thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
于 2018-03-26T11:25:30.040 回答
1

我正在这样做:

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

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

于 2019-01-08T12:51:34.127 回答