Sharing an enumerator across threads

后端 未结 1 946
温柔的废话
温柔的废话 2020-12-19 09:22

I want to call a common enumerator from different threads. When I do the following,

enum = (0..1000).to_enum
t1 = Thread.new do
  p enum.next
  sleep(1)
end
         


        
相关标签:
1条回答
  • 2020-12-19 09:33

    You can use Queue

    queue = Queue.new
    (0..1000).map(&queue.method(:push))
    
    t1 = Thread.new do
      while !queue.empty?
        p queue.pop(true)
        sleep(0.1)
      end
    end
    t2 = Thread.new do
      while !queue.empty?
        p queue.pop(true)
        sleep(0.1)
      end
    end
    t1.join
    t2.join
    
    0 讨论(0)
提交回复
热议问题