Я пытаюсь написать некоторый небольшой код тайм-аут:Почему этот код дважды печатает одно и то же?
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
исправляет его. Почему это происходит?
Невозможно воспроизвести. –
@Marc: Я обнаружил, что если вы введете 'ruby' в терминал (без аргументов) и просто вставьте код и нажмите Control-D,' 'hi" 'будет только печататься один раз. Но если вы действительно поместите код в файл и сделаете что-то вроде 'ruby test.rb', это произойдет. Я думаю, что это может иметь какое-то отношение к скорости, с которой рубин может читать файл, и скорость, с которой рубин может читать stdin. – Adrian
Определенно ошибка. 'ruby somefile.rb' будет печатать его дважды большую часть времени, это прерывисто. Может ли файл на redmine.ruby-lang.org? Вы можете указать «ruby 1.9.3dev (2010-07-19 trunk 28679) [x86_64-darwin10.4.0]» для 'ruby -v', поскольку я воспроизвел это с помощью соединительной линии. Или дайте мне знать, и я создам проблему. –