本文共 1981 字,大约阅读时间需要 6 分钟。
require 'thread'puts "Synchonize Thread"@num = 200@mutex = Mutex.newdef buy_ticket(num) @mutex.lock if @num >= num @num = @num - num puts "you have successful bought #{num} tickets" else puts "sorry, no enough tickets" end @mutex.unlockendticket1 = Thread.new do 10.times do ticket_num = 15 buy_ticket(ticket_num) sleep 0.01 endendticket2 = Thread.new do 10.times do ticket_num = 20 buy_ticket(ticket_num) sleep 0.01 endendsleep 1ticket1.jointicket2.join------------------------------------------------------------D:\Ruby27-x64\bin\ruby.exe D:/MyProject/Ruby/workspace/test.rbSynchonize Threadyou have successful bought 15 ticketsyou have successful bought 20 ticketsyou have successful bought 15 ticketsyou have successful bought 20 ticketsyou have successful bought 15 ticketsyou have successful bought 20 ticketsyou have successful bought 15 ticketsyou have successful bought 20 ticketsyou have successful bought 15 ticketsyou have successful bought 20 ticketsyou have successful bought 15 ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketssorry, no enough ticketsProcess finished with exit code 0
require 'thread'puts "SizedQuee Test"queue = Queue.newproducer = Thread.new do 10.times do |i| sleep rand(i) queue << i puts "#{i} produced" endendconsumer = Thread.new do 10.times do |i| value = queue.pop sleep rand(i / 2) puts "consumed #{value}" endendconsumer.join------------------------------------------------------------# 多次运行结果可能会稍有差异D:\Ruby27-x64\bin\ruby.exe D:/MyProject/Ruby/workspace/test.rbSizedQuee Test0 produced1 produced2 producedconsumed 0consumed 1consumed 23 producedconsumed 34 producedconsumed 45 producedconsumed 56 producedconsumed 67 produced8 producedconsumed 7consumed 89 producedconsumed 9Process finished with exit code 0
转载地址:http://fjjqi.baihongyu.com/