В 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
(примечание:.. Фон может сигнализировать несколько раз на передний план каждый раз, когда на первый план заканчивает ожидания, он сбрасывает проволочку)
В МРТ («C» рубиновые версии 1.8.6 или 1.9.2) это будет работать, так как гигантская большой замок вокруг всего кода ruby, так что, хотя у вас есть 2 потока, только один может когда-либо запускаться одновременно ... В JRuby или IronRuby, однако, потоки будут выполняться одновременно, и код не будет безопасным. Вам нужно будет использовать 'Mutex' и' ConditionVariable' для управления этим –