From: Norman Makoto Su Date: 2002-04-01T14:25:28+09:00 Subject: Re: Threads in Iterators Thanks for all your help, I've just decided to do it as (using Guy's example): #!/usr/bin/ruby require 'thread' arr = [1,2,3,4] mutex = Mutex.new def arr.each(mutex) 0.upto(length-1) do |i| Thread.new(self[i]) {|val| sleep(rand .1) mutex.synchronize { yield val } } end end vals = [] val = nil arr.each(mutex) {|val| vals << val sleep(rand .1) vals << (val + 10) } Thread.list.each do |aThread| aThread.join if aThread != Thread.current end puts vals % ruby test_mutex.rb 3 13 2 12 4 14 1 11 % ruby test_mutex.rb 4 14 3 13 1 11 2 12 -- Norman