1
A
回答
1
從Ruby documentation for Queue#pop:
從隊列中檢索數據。如果隊列爲空,則將調用線程掛起,直到將數據推入隊列。如果non_block爲true,則該線程不會掛起,並引發異常。
您正在使用單線程,因此您的隊列永遠不會包含任何對象,因此您的線程會永久掛起(死鎖)。
試試這個
require "thread"
queue = Queue.new
thread1 = Thread.new do
5.times do |i|
x = queue.pop
sleep rand(i) # simulate workload
puts "taken #{x} from queue!"
end
end
thread2 = Thread.new do
5.times do |i|
sleep rand(i) # simulate workload
queue.push i
puts "pushed #{i} to the queue!"
end
end
thread1.join
你有兩個線程,因此您將不會遇到死鎖。當隊列爲空時,消費者線程將被掛起,但當第二個線程將某些東西推送到隊列時,它將再次變爲活動狀態。
相關問題
- 1. 設置全局默認紅寶石機上RVM多紅寶石
- 2. 紅寶石散列在紅寶石
- 3. 紅寶石寶石文檔
- 4. 寶石安裝紅寶石
- 5. 調試寶石紅寶石
- 6. 紅寶石程序寶石
- 7. 錯誤紅寶石寶石
- 8. Twitter的紅寶石寶石
- 9. 卸載紅寶石寶石
- 10. 紅寶石寶石 - LoadError
- 11. 紅寶石寶石LoadError
- 12. 安裝紅寶石寶石
- 13. Python /紅寶石:cronjob將不會加載紅寶石寶石?
- 14. 評估紅寶石
- 15. $ DEBUG紅寶石全局變量
- 16. 在紅寶石
- 17. 紅寶石
- 18. 在紅寶石
- 19. 與紅寶石
- 20. 從紅寶石
- 21. 紅寶石
- 22. 從紅寶石
- 23. 紅寶石 - LoadError
- 24. 紅寶石
- 25. 紅寶石
- 26. 紅寶石
- 27. 在紅寶石
- 28. 紅寶石
- 29. 從紅寶石
- 30. 紅寶石 - encrypted_strings