#!/usr/local/bin/ruby

arr = Array.new

for j in 0..100000
   arr[j] = rand(1000) # 1000 is max int
end

# Threads A and B both loop continually, printing one message,
# sleeping for half a second, and then passing control to
# another thread
# threads start automactically

threadA = Thread.new do
   i = 0
   loop do
      puts "Thread A: #{i += 1}"
      puts "Thread A: #{arr[i]}"
      i += 1
      sleep 1.5
      Thread.pass
      if i >= 10 
         Thread.stop
      end
   end
end

threadB = Thread.new do
   i = 10000
   loop do
      puts "Thread B: #{i += 1}"
      puts "Thread B: #{arr[i]}"
      sleep 0.5
      Thread.pass
      if i >= 10010 
         Thread.stop
      end
   end
end

# Thread C also loops continually, printing a message. However,
# it stops after each message, waiting to be wokenup again by
# another thread (in this case, the main program)
threadC = Thread.new do
   i = 0
   loop do
      puts "Thread C: #{i += 1}"
      Thread.stop
   end
end

# The main program loops continually, doing nothing other than
# sleeping for half a second and then letting Thread C have a go

# main routine
loop do
   sleep 0.5
   threadC.run
end
Published in: Ruby
Download

Related snippets