等待一个线程在Ruby中死掉

Aar*_*sen 7 ruby multithreading ruby-2.4 ruby-2.5

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

thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?
Run Code Online (Sandbox Code Playgroud)

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

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

Aar*_*sen 10

弄清楚了; #join杀死它后你仍然可以使用线程,所以你可以使用thread.kill.join阻塞直到线程死掉.

此代码从不打印Not dead:

thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
Run Code Online (Sandbox Code Playgroud)