Я изучаю Ruby в течение последних нескольких дней, и у меня возникли некоторые проблемы, связанные с реализацией потоков. Я программировал на других языках раньше (в основном, Java и C), и я все еще не мог понять, в чем проблема. Я запускаю ruby 2.1.2p95 на сервере Ubuntu 14.10. Код в вопросе от Humble Литл Рубин книги г-соседски в:Вводная версия Ruby Threading
mate = Thread.new do
puts "Ahoy! Can I be dropping the anchor sir?"
Thread.stop
puts "Aye sir, dropping anchor!"
end
Thread.pass
puts "CAPTAIN: Aye, laddy!"
mate.run
mate.join
вывод должен быть:
Ahoy! Can I be dropping the anchor sir?
CAPTAIN: Aye, laddy!
Aye sir, dropping anchor!
Но вместо этого, я получаю следующий присоединиться и тупиковое ошибку:
CAPTAIN: Aye, laddy!
Ahoy! Can I be dropping the anchor sir?
ex2.rb:12:in `join': No live threads left. Deadlock? (fatal)
from ex2.rb:12:in `<main>'
Я столкнулся с ошибками с другими примерами потоков из других ресурсов и попытался запустить примеры на других машинах Ubuntu, а также попробовать Ruby 2.2. Есть ли вопиющая концепция, которую я пропускаю? Что-то изменилось в недавних версиях Ruby, которые сочли бы примеры устаревшими? Спасибо за помощь!
Ваш код работает как ожидается для меня, используя Ruby 2.0.0 на OS X Yosemite. – pjs
Я использую ruby 2.2.0 на OS X Yosemite, и я получаю сообщение об ошибке. Я предполагаю, что это ошибка. – Adrian
Я обнаружил, что этот код вызывает ошибку для меня более надежно: 'Thread.new {Thread.stop} .join' – Adrian