线程同步使用条件变量(Condition Variables)
require 'monitor' SONGS = [ 'Blue Suede Shoes', 'Take Five', 'Bye Bye Love', 'Rock Around The Clock', 'Ruby Tuesday' ] START_TIME = Time.new def timestamp (Time.now - START_TIME).to_i end # Wait for up to two minutee between customer requests def get_customer_request sleep(120 * rand) song = SONGS.shift puts "#{timestamp}: Requesting #{song}" if song song end # Songs take between two and three minutes def play(song) puts "#{timestamp}: Playing #{song}" sleep(120 + 60*rand) end ok_to_shutdown = false # and here's our original code playlist = [] playlist.extend(MonitorMixin) plays_pending = playlist.new_cond # Customer request thread customer = Thread.new do loop do req = get_customer_request puts req break unless req playlist.synchronize do playlist << req plays_pending.signal end end end # Player Thread player = Thread.new do loop do song = nil playlist.synchronize do break if ok_to_shutdown && playlist.empty? plays_pending.wait_while {playlist.empty?} song = playlist.shift end break unless song play(song) end end customer.join ok_to_shutdown = true player.join
19: Requesting Blue Suede Shoes
Blue Suede Shoes
19: Playing Blue Suede Shoes
63: Requesting Take Five
Take Five
101: Requesting Bye Bye Love
Bye Bye Love
149: Playing Take Five
169: Requesting Rock Around The Clock
Rock Around The Clock
215: Requesting Ruby Tuesday
Ruby Tuesday
269: Playing Bye Bye Love
428: Playing Rock Around The Clock
574: Playing Ruby Tuesday
相关推荐
通过`ruby-4-variables.mp4`和`ruby-5-variables-rules.mp4`,你可以深入理解变量的用法和规则,而`ruby-6-expression.mp4`将帮助你掌握如何在Ruby中构建和使用表达式。这些视频教程将为你提供一个坚实的Ruby编程...
Ruby 支持多种类型的变量,例如局部变量(Local Variables)、实例变量(Instance Variables)、类变量(Class Variables)和全局变量(Global Variables)。变量命名应遵循特定的规则,以确保其有效性和可读性。 #...
translation - Implementing-a-Thread-Safe-Queue-using-Condition-Variables实现一个线程安全队列原链接: 翻译: Scott Gu源代码:多线程代码需要一次又一次面对的一个问题是,如何把数据从一个线程传到另一个县城...
本文总结了操作系统研讨课中Project 4 Task 2的同步原语实现的知识点,涵盖了condition variables、semaphores和barriers三种同步原语的实现机制、数据结构和函数实现。 一、同步原语简介 同步原语是操作系统中...
你还可以使用`v`(variables)命令列出所有局部变量及其值,`p`(print)命令打印表达式的值。 5. **堆栈跟踪** 使用`bt`(backtrace)命令查看调用堆栈,了解代码的执行路径。 6. **条件断点** 可以设置条件...
10. **反射(Reflection)**:Ruby提供了一系列的内省方法,如`methods`,`instance_variables`,`ancestors`等,允许程序检查自身结构,这对于调试和元编程非常有用。 通过熟练掌握上述概念和技巧,Ruby开发者可以...
p obj.instance_variables ``` **12.3 动态方法调用** 可以通过反射来动态调用方法。 ```ruby obj.send(:method_name, *args) ``` **12.4 Hook和回调方法** Ruby支持定义钩子方法,以便在特定时机自动执行某些...
在前端开发领域,CSS Variables(也称为CSS自定义属性)是一种强大的工具,它允许开发者在整个样式表中定义和重用变量。PostCSS 是一个JavaScript工具,它可以解析CSS,执行一些任务,然后输出新的CSS。Postcss-css-...
2. **数据类型转换**:`instance_variables`和`constants`等反射方法返回的不再是字符串数组,而是符号数组。 3. **字符串索引**:索引字符串时,返回的不再是整数,而是一个单字符的字符串。 4. **Enumerable#zip...
### Ruby Pocket Reference: Key IT Knowledge Points #### Title and Description Overview The title "Ruby Pocket Reference" and the description "Ruby.Pocket.Reference.Jul.2007 learning ruby 的 can ...
本书的标题“Probability, Random Variables and Stochastic Processes”(概率论、随机变量和随机过程)指向了概率论这一数学分支的主要研究对象和研究内容。概率论是研究随机事件及其规律性的数学理论,它为分析和...
### Ruby袖珍参考手册知识点概览 #### 一、书籍简介 《Ruby袖珍参考手册》是一本旨在帮助Ruby开发者快速查找所需知识点的手册。无论你是通过Rails框架接触Ruby,还是因为Ruby是一种干净、强大且表达力丰富的语言而...
根据提供的文件内容,本文将重点介绍“Complex Variables and Applications”这本书的核心知识点,同时也会提及书籍的出版信息、作者简介以及书籍的版权声明。 核心知识点: 《复变量及其应用》(Complex ...
- **Variables:** Variables are fundamental constructs in Ruby used to store values. The book covers different types of variables, including local, instance, class, and global variables, along with ...
在编写代码后,用户可以使用RT-Thread Studio的调试工具进行调试,例如 breakpoints、variables、expressions等。用户也可以下载编译后的可执行文件到AT32系列MCU中。 注意事项 在使用RT-Thread Studio开发AT32...
Probability, Random Variables and Stochastic Processes 英文第四版。 作者是Athanasios Papoulis。帕普里斯教授,他1921年出生于希腊,分别从雅典国家技术大学和美国宾夕法尼亚大学获得电子工程和数学学位。他...
Complex Variables and Applications 7ed
### Ruby程序设计(简洁清新的教程) #### 一、Ruby语言概述 **1.1 Ruby的历史** Ruby语言是由日本人松本行弘(Matsumoto Yukihiro)在1993年开始开发的一种脚本语言。起初,Matsumoto对脚本语言产生了浓厚的兴趣,...
Iterative Solution of Nonlinear Equations in Several Variables provides a survey of the theoretical results on systems of nonlinear equations in finite dimension and the major iterative methods for ...
Probability, Random Variables, and Stochastic Processes (McGraw-Hill Series in Electrical Engineering)