В моем основном потоке я пытаюсь дождаться двух ресурсов из двух отдельных потоков. Способ, который я реализовал, выглядит следующим образом:
require 'thread'
def new_thread
Thread.current[:ready_to_go] = false
puts "in thread: new thread"
sleep(5)
puts "in thread: sleep finished"
Thread.current[:ready_to_go] = true
sleep(2)
puts "in thread: back to thread again!"
end
thread1 = Thread.new do
new_thread
end
thread2 = Thread.new do
new_thread
end
# the main thread wait for ready_to_go to start
while (!(thread1[:ready_to_go] && thread2[:ready_to_go]))
sleep(0.5)
end
puts "back to main!"
sleep(8)
puts "main sleep over!"
thread1.join
thread2.join
Есть ли лучший способ реализовать это? Я попытался использовать условные переменные: два потока сигнализируют об условных переменных, а основной поток ждет их. Но метод ожидания требует мьютекса в моем основном потоке, которого я стараюсь избегать.