Я пытаюсь написать небольшой код тайм-аута:
t = Thread.new { sleep 3 } # <- The thread that will do stuff.
Thread.new { sleep 2; t.kill; p 'hi!' } # <- The thread that will kill it after two seconds.
t.join
Если первый поток завершит свою работу в течение двух секунд, он остановится, а основному потоку будет нечего делать.Это заставит программу завершиться до того, как второй поток попадет в часть t.kill
.Но когда я запускаю этот код, "hi!"
выводится дважды.Замена p
на puts
исправляет это.Почему это происходит?