在Ruby中,我想讓兩個線程同時運行,並希望後臺線程定期發送前臺線程的信號。如何讓前臺線程阻塞,直到後臺線程顯示'去'?我可以想到一些方法來做到這一點,但是在最恰當的,慣用的Ruby方法之後。Ruby多線程:讓一個線程等待來自另一個線程的信號
在代碼:
loop do # background, thread 1
sleep 3
receive_input
tell_foreground_input_is_ready # <-- how do I do this?
end
和
loop do # foreground, thread 2
wait_for_signal_from_background # <-- how do I do this?
do_something
end
(注意:背景可能每次前景完畢等待信號多次到前臺,它重置積壓)
在MRI(「C」 Ruby版本1.8.6或1.9.2),這將工作,因爲有一個巨大的圍繞所有ruby代碼的大鎖,所以即使你有2個線程,一次只能運行一個線程......但在JRuby或IronRuby中,線程將同時運行,並且代碼將不安全。你需要使用'Mutex'和'ConditionVariable'來管理這個 – 2011-04-21 00:36:06