From: 7stud -- Date: 2009-02-17T23:14:51+09:00 Subject: Re: Ruby Threading question Creating 4 threads Robert Klemme wrote: > On 17.02.2009 04:38, Julian Leviston wrote: >> Put a while around the pop and block of code to run. > > Also class Queue has thread safety built in already. > > Kind regards > > robert ...an example of using a Queue: require 'thread' arr = %w[a b c d e f g h i j] num_threads = 4 q = Queue.new workers = [] num_threads.times do |i| workers << Thread.new("worker#{i+1}") do |name| loop do data = q.pop #pops data off bottom of q, blocks if no data puts "#{name} retrieved data: #{data}" break if data == "*END_OF_DATA_FLAG*" end end end arr.each {|item| q.push(item)} num_threads.times do q.push("*END_OF_DATA_FLAG*") end workers.each {|thr| thr.join} puts "Workers are all done working." --output:-- worker1 retrieved data: a worker2 retrieved data: b worker3 retrieved data: c worker4 retrieved data: d worker1 retrieved data: e worker2 retrieved data: f worker3 retrieved data: g worker4 retrieved data: h worker1 retrieved data: i worker2 retrieved data: j worker3 retrieved data: *END_OF_DATA_FLAG* worker4 retrieved data: *END_OF_DATA_FLAG* worker1 retrieved data: *END_OF_DATA_FLAG* worker2 retrieved data: *END_OF_DATA_FLAG* Workers are all done working. -- Posted via http://www.ruby-forum.com/.