`
garyli
  • 浏览: 176080 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruby Thread Condition Variables

    博客分类:
  • Ruby
阅读更多

 

线程同步使用条件变量(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 基础语法 视频教程1

    通过`ruby-4-variables.mp4`和`ruby-5-variables-rules.mp4`,你可以深入理解变量的用法和规则,而`ruby-6-expression.mp4`将帮助你掌握如何在Ruby中构建和使用表达式。这些视频教程将为你提供一个坚实的Ruby编程...

    Ruby Pocket Reference.pdf

    Ruby 支持多种类型的变量,例如局部变量(Local Variables)、实例变量(Instance Variables)、类变量(Class Variables)和全局变量(Global Variables)。变量命名应遵循特定的规则,以确保其有效性和可读性。 #...

    Implementing-a-Thread-Safe-Queue-using-Condition-Variables

    translation - Implementing-a-Thread-Safe-Queue-using-Condition-Variables实现一个线程安全队列原链接: 翻译: Scott Gu源代码:多线程代码需要一次又一次面对的一个问题是,如何把数据从一个线程传到另一个县城...

    任务二-同步原语实现1

    本文总结了操作系统研讨课中Project 4 Task 2的同步原语实现的知识点,涵盖了condition variables、semaphores和barriers三种同步原语的实现机制、数据结构和函数实现。 一、同步原语简介 同步原语是操作系统中...

    ruby-debug命令详解

    你还可以使用`v`(variables)命令列出所有局部变量及其值,`p`(print)命令打印表达式的值。 5. **堆栈跟踪** 使用`bt`(backtrace)命令查看调用堆栈,了解代码的执行路径。 6. **条件断点** 可以设置条件...

    Ruby元编程pdf

    10. **反射(Reflection)**:Ruby提供了一系列的内省方法,如`methods`,`instance_variables`,`ancestors`等,允许程序检查自身结构,这对于调试和元编程非常有用。 通过熟练掌握上述概念和技巧,Ruby开发者可以...

    ruby初学者教程(对初学者很有帮助)

    p obj.instance_variables ``` **12.3 动态方法调用** 可以通过反射来动态调用方法。 ```ruby obj.send(:method_name, *args) ``` **12.4 Hook和回调方法** Ruby支持定义钩子方法,以便在特定时机自动执行某些...

    前端开源库-postcss-css-variables

    在前端开发领域,CSS Variables(也称为CSS自定义属性)是一种强大的工具,它允许开发者在整个样式表中定义和重用变量。PostCSS 是一个JavaScript工具,它可以解析CSS,执行一些任务,然后输出新的CSS。Postcss-css-...

    为何Ruby 1.9的不兼容性会导致原有Ruby代码无法工作

    2. **数据类型转换**:`instance_variables`和`constants`等反射方法返回的不再是字符串数组,而是符号数组。 3. **字符串索引**:索引字符串时,返回的不再是整数,而是一个单字符的字符串。 4. **Enumerable#zip...

    Ruby.Pocket.Reference

    ### 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

    本书的标题“Probability, Random Variables and Stochastic Processes”(概率论、随机变量和随机过程)指向了概率论这一数学分支的主要研究对象和研究内容。概率论是研究随机事件及其规律性的数学理论,它为分析和...

    Ruby袖珍参考手册

    ### Ruby袖珍参考手册知识点概览 #### 一、书籍简介 《Ruby袖珍参考手册》是一本旨在帮助Ruby开发者快速查找所需知识点的手册。无论你是通过Rails框架接触Ruby,还是因为Ruby是一种干净、强大且表达力丰富的语言而...

    Complex Variables and Applications - James Brown

    根据提供的文件内容,本文将重点介绍“Complex Variables and Applications”这本书的核心知识点,同时也会提及书籍的出版信息、作者简介以及书籍的版权声明。 核心知识点: 《复变量及其应用》(Complex ...

    Ruby Pocket Reference

    - **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 ...

    AT32使用RT-thread studio 流程

    在编写代码后,用户可以使用RT-Thread Studio的调试工具进行调试,例如 breakpoints、variables、expressions等。用户也可以下载编译后的可执行文件到AT32系列MCU中。 注意事项 在使用RT-Thread Studio开发AT32...

    Probability, Random Variables and Stochastic Processes 4th edition

    Probability, Random Variables and Stochastic Processes 英文第四版。 作者是Athanasios Papoulis。帕普里斯教授,他1921年出生于希腊,分别从雅典国家技术大学和美国宾夕法尼亚大学获得电子工程和数学学位。他...

    Complex Variables and Applications 7ed

    Complex Variables and Applications 7ed

    Ruby程序设计(简洁清新的教程)

    ### Ruby程序设计(简洁清新的教程) #### 一、Ruby语言概述 **1.1 Ruby的历史** Ruby语言是由日本人松本行弘(Matsumoto Yukihiro)在1993年开始开发的一种脚本语言。起初,Matsumoto对脚本语言产生了浓厚的兴趣,...

    Iterative Solution of Nonlinear Equations in Several Variables

    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 ...

    solution : Probability, Random Variables, and Stochastic Processes

    Probability, Random Variables, and Stochastic Processes (McGraw-Hill Series in Electrical Engineering)

Global site tag (gtag.js) - Google Analytics