博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby 多线程同步
阅读量:4230 次
发布时间:2019-05-26

本文共 1981 字,大约阅读时间需要 6 分钟。

Mutex(互斥锁)

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

Queue(队列)

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/

你可能感兴趣的文章
Pro .NET 2.0 Windows Forms and Custom Controls in C#
查看>>
Beginning Regular Expressions
查看>>
Beginning Visual Web Developer 2005 Express: From Novice to Professional
查看>>
Beginning Programming
查看>>
Windows .NET Server 2003 Domains & Active Directory
查看>>
Information Systems : Achieving Success by Avoiding Failure
查看>>
Web Systems Design and Online Consumer Behavior
查看>>
VoIP For Dummies
查看>>
Administrator's Guide to SQL Server 2005
查看>>
Ajax Design Patterns
查看>>
DNS and BIND (5th Edition)
查看>>
Firewall Fundamentals
查看>>
Learning PHP and MySQL
查看>>
Agile Software Construction
查看>>
Computer Security Basics
查看>>
Sams Teach Yourself MySQL in 10 Minutes
查看>>
Information Systems : The State of the Field
查看>>
IPv6 Essentials
查看>>
Microsoft Visual C++ 2005 Express Edition Programming for the Absolute Beginner
查看>>
Microsoft Visual Basic 2005 Express Edition Programming for the Absolute Beginner
查看>>