等待一个线程在 Ruby 内死亡
Wait for a thread to die in Ruby
看来,在 Ruby 2.4 和 2.5 中,线程不会在您对它们调用 #kill
时立即死亡。此代码片段将打印 Not dead 几次:
thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?
我想阻止主线程的执行,直到辅助线程被终止。我尝试使用 thread.join.kill
,但这当然会阻塞主线程,因为线程的循环永远不会终止。
如何确保线程在主线程继续运行之前被杀死?
想通了;你仍然可以 #join
杀死它后的线程,所以你可以使用 thread.kill.join
阻塞直到线程死亡。
此代码从不打印 Not dead:
thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
我正在这样做:
thread = Thread.new { loop {} }
thread.kill
sleep 0.001 while thread.alive?
这就是我在 ThreadPool.
中终止线程的方式
看来,在 Ruby 2.4 和 2.5 中,线程不会在您对它们调用 #kill
时立即死亡。此代码片段将打印 Not dead 几次:
thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?
我想阻止主线程的执行,直到辅助线程被终止。我尝试使用 thread.join.kill
,但这当然会阻塞主线程,因为线程的循环永远不会终止。
如何确保线程在主线程继续运行之前被杀死?
想通了;你仍然可以 #join
杀死它后的线程,所以你可以使用 thread.kill.join
阻塞直到线程死亡。
此代码从不打印 Not dead:
thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
我正在这样做:
thread = Thread.new { loop {} }
thread.kill
sleep 0.001 while thread.alive?
这就是我在 ThreadPool.
中终止线程的方式