Жди, пока нить умрет в Рубине.

похоже, что в Ruby 2.4 и 2.5 потоки не умирают, как только вы вызываете #kill на них. Этот фрагмент кода будет печатать не мертвый несколько раз:

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

Я хотел бы заблокировать выполнение основного потока, пока вторичный поток не будет убит. Я пробовал использовать thread.join.kill, но, конечно, это блокирует основной поток, потому что цикл потока никогда не заканчивается.

как я могу гарантировать, что поток будет убит до того, как основной поток продолжится?

1 ответов


понял это; вы все еще можете #join поток после его убийства, поэтому вы можете использовать thread.kill.join блокировать, пока поток не умрет.

этот код не выводит не мертвый:

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