Dans Ruby, je veux avoir deux fils en cours d'exécution en même temps, et que vous voulez le fil d'arrière-plan pour signaler périodiquement le fil de premier plan. Comment puis-je bloquer le fil de premier plan jusqu'à ce que le fil d'arrière-plan dise «aller»? Je peux penser à quelques façons de le faire, mais je suis après le plus approprié, idiomatiques méthode Ruby.Ruby multithreading: faire un fil d'attente pour un signal d'un autre
Dans le code:
loop do # background, thread 1
sleep 3
receive_input
tell_foreground_input_is_ready # <-- how do I do this?
end
et
loop do # foreground, thread 2
wait_for_signal_from_background # <-- how do I do this?
do_something
end
(Note:.. Arrière-plan peut signaler plusieurs fois au premier plan de chaque avant-plan le temps fini de l'attente, il remet à zéro carnet de commandes) Vous
En IRM (« C » versions Ruby 1.8.6 ou 1.9.2) cela fonctionnera, car il y a un géant grande écluse autour de tout le code Ruby, donc même si vous avez 2 fils, ne peut jamais fonctionner à la fois ... en JRuby ou IronRuby cependant, les fils courront en même temps, et le code ne sera pas en sécurité. Vous aurez besoin d'utiliser '' Mutex' et ConditionVariable' pour gérer cette –