Неустранимая ошибка тупика в Ruby-потоке - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть этот простой код рубина:

require 'rubygems'
require 'Thread'


queue = Queue.new

t = Thread.new do
  loop do
    user = queue.pop

    puts "Unqueued #{user.nickname}, running all scripts..."

    #do stuff
    user.run_all

    puts "Finished running all script for  #{user.nickname}, sleeping for 2"
    sleep 2

    queue << user    
  end
end

t.join

Когда я пытаюсь запустить его, выдается следующее сообщение:

deadlock 0x10ec549f0: sleep:-  - ./Machine.rb:9
deadlock 0x10ea46348: sleep:J(0x10ec549f0) (main) - ./Machine.rb:23
fatal: Thread(0x10ea46348): deadlock
    from ./Machine.rb:23:in `join'
    from ./Machine.rb:23
    from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `require'
    from (irb):1

Что я делаю не так? Спасибо

1 Ответ

5 голосов
/ 01 февраля 2012

Вы пытаетесь извлечь что-то из очереди, и очередь пуста. Обычно ваш поток блокируется, ожидая, пока другой поток что-то нажмет. Но нет другого потока, кроме основного процесса, ожидающего завершения вашего потока. Итак, что вы ожидаете от Ruby?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...