Je suis en train d'écrire un petit code timeout:Pourquoi ce code imprime-t-il deux fois la même chose?
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
Si le premier thread termine son travail dans les deux secondes, il arrêtera, et le fil conducteur aura rien à faire. Cela provoquera la sortie du programme avant que le deuxième thread ne soit associé à la partie t.kill
. Mais, quand je cours ce code, "hi!"
est imprimé deux fois. Le remplacement du p
par puts
résout le problème. Pourquoi cela arrive-t-il?
Impossible de reproduire. –
@Marc: J'ai trouvé que si vous tapez 'ruby' dans un terminal (sans arguments) et que vous collez simplement le code et appuyez sur Ctrl-D,' "hi" 'ne sera imprimé qu'une seule fois. Mais si vous mettez le code dans un fichier et que vous faites quelque chose comme "ruby test.rb", cela arrivera. Je pense que cela peut avoir quelque chose à voir avec la vitesse à laquelle ruby peut lire un fichier par rapport à la vitesse à laquelle ruby peut lire stdin. – Adrian
Certainement un bug. 'ruby somefile.rb' l'imprime deux fois la plupart du temps, c'est intermittent. Pourrait-il le déposer sur redmine.ruby-lang.org? Vous pouvez spécifier "ruby 1.9.3dev (2010-07-19 trunk 28679) [x86_64-darwin10.4.0]" pour 'ruby -v', comme je l'ai reproduit avec tronc. Ou laissez-moi savoir et je vais créer le problème. –