def func1
i=0
while i<=2
puts "func1 at: #{Time.now}"
sleep(2)
i+=1
end
end
def func2
j=0
while j<=2
puts "func2 at: #{Time.now}"
sleep(1)
j+=1
end
end
puts "Started At #{Time.now}"
t1=Thread.new{func1()}
t2=Thread.new{func2()}
t1.join
t2.join
puts "End at #{Time.now}"
Ruby 代码不同python,不需要完整完全格式化
require 'thread'
puts "Synchronize Thread"
@num = 200
@mutex = Mutex.new
def buyTicket(num)
@mutex.lock
# 不一定非要格式化
if @num >= num
@num -= num
puts "You have successfully bought #{num} tickets"
else
puts "Sorry,no enough tickets"
end
@mutex.unlock
end
ticket1=Thread.new 10 do
10.times do |value|
ticketNum=15
buyTicket(ticketNum)
sleep 0.01
end
end
ticket2=Thread.new 10 do
10.times do |value|
ticketNum = 20
buyTicket(ticketNum)
sleep 0.01
end
end
sleep 1
ticket1.join
ticket2.join
require 'thread'
puts "SizedQueue Test"
queue = Queue.new
producer=Thread.new do
10.times do |i|
sleep rand(i) #让线程睡眠一段时间
queue << i
puts "#{i} produced"
end
end
consumer = Thread.new do
10.times do |i|
value = queue.pop
sleep rand(i/2)
puts "consumed #{value}"
end
end
consumer.join