2013-05-21 4 views
0

У меня есть две темы в рубиновом процессе. То, что я хочу сделать, - это один сон и другие отправьте сигнал, чтобы проснуться.Ruby Wait and Signal

Я знаю, как это сделать с помощью Mutex и ConditionalVariables, но у меня нет секции критика для запуска, поэтому это неправильное решение.

Я знаю, как это сделать с остановкой потока и потоком, где на потоке останавливается сам, а другие вызовы работают на нем, но теперь это то, что я действительно ищу.

Есть ли другой способ? То, что я пытаюсь выполнить, - это заставить поток ждать содержимого в базе данных, а другой - сообщать, когда есть контент.

+0

http://stackoverflow.com/questions/534919/ruby-thread-programming-ruby-equivalent-of-java-wait-notify-notifyall дает краткое изложение и пример того, как делать то, что вы хотите сделать , – mcfinnigan

+1

@Heineken Что случилось с подходом Mutex/CondVar? Даже если у вас есть логический предикат (данные/нет данных), доступ к предикату должен выполняться под защитой мьютекса. –

+0

Да, я пошел с подходом Mutex/CondVar. Я мог бы получить что-то вроде очереди и сигнала, как у меня в java, но не смог найти. – Gabriel

ответ

0

Возможно, что-то подобное будет работать?

require "thread" 

q = Queue.new 

Thread.new do 
    sleep 10 
    q.push "*" 
end 

p q.pop