ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)_ruby专题

Ruby线程实现经典的生产者消费者问题,用ruby中的Queue类实现线程同步问题。

复制代码 代码如下:

require "thread" 
puts "ProAndCon" 

queue = Queue.new    #用队列Queue实现线程同步 

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  #等待consumer线程的输出完成再关闭此进程

时间: 2024-11-05 21:46:36

ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)_ruby专题的相关文章

Lock、Condition实现简单的生产者消费者模式示例_java

复制代码 代码如下: package condition; import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock; /** * 利用Lock.Condition实现生产者消费者模式 * @aut

java解决单缓冲生产者消费者问题示例_java

经典的生产者消费者问题模拟.此程序模拟最简单情形--单缓冲.为模拟实际情况,consume item和produce item时加了延时,可以通过修改延时模拟不同的生成消费速率. [code] [/co/** * single buffer consumer-producer problem. * by xu(xusiwei1236@163.com). * */public class ConsumerProducer {  static Object buffer = null;  stati

JAVA synchronized 线程经典 生产者消费者 两个完全不同的实现的方式

package sell_ticket; public class ThreadTicket { public static void main(String[] args) { MyThread m = new MyThread(); Thread t1 = new Thread(m); Thread t2 = new Thread(m); Thread t3 = new Thread(m); t1.start(); t2.start(); t3.start(); } } class MyTh

实例解析Ruby程序中调用REXML来解析XML格式数据的用法_ruby专题

REXML 是由 Sean Russell 编写的库.它不是 Ruby 的唯一 XML 库,但它是很受欢迎的一个,并且是用纯 Ruby 编写( NQXML 也是用 Ruby 编写的, 但 XMLParser 封装了用 C 编写的 Jade 库). 在他的 REXML 概述中,Russell 评论道: 我有这样的问题:我不喜欢令人困惑的 API.有几种用于 Java 实现的 XML 解析器 API.其中大多数都遵循 DOM 或 SAX,并且在基本原理上与不断出现的众多 Java API 非常相似.

使用Ruby来编写访问Twitter的命令行应用程序的教程_ruby专题

简介 Twitter 现已成为社交网络中的佼佼者.Twitter 只允许用户发布不多于 140 个字符的内容,谁能够想到,这个过去毫不起眼的小网站如今却价值十多亿美元,拥有数百万用户,Twitter 平台上已构建了大量的应用程序,并且不断有新的开发人员准备投入这一浪潮中. 本文并不打算介绍 Twitter(事实上,也没有这个必要).相反,本文将介绍如何访问 Twitter 平台来构建出色的命令行应用程序.Twitter 支持各种编程语言,包括 C++.Java?.Perl.Ruby.PHP 和

Ruby 中$开头的全局变量、内部变量、隐藏变量介绍_ruby专题

Ruby 中充满了一系列的隐藏变量,我们可以从这些预定义的全局变量中获取一些有意思的信息. 全局进程变量 $$ 表示当前运行的 ruby 进程. 复制代码 代码如下: >> $$=> 17170 我们可以从当前进程杀死它自己 复制代码 代码如下: >> `kill -9 #{$$}`[1]    17170 killed     irb $? 表示最近一个子进程的状态 复制代码 代码如下: >> `echo hello`=> "hello\n&qu

Ruby使用设计模式中的代理模式与装饰模式的代码实例_ruby专题

代理模式 需求: 小明让小李替他追小丽(送洋娃娃,送花,送巧克力) 没有代理的代码: # -*- encoding: utf-8 -*- #追求者类 class Pursuit attr_accessor :mm def initialize(mm) @mm = mm end def give_dolls puts "#{mm.name} 送你洋娃娃" end def give_flowers puts "#{mm.name} 送你鲜花" end def give_

Ruby中使用Nokogiri包来操作XML格式数据的教程_ruby专题

安装 对于Ubuntu,需要安装好 libxml2, libxslt 这两个组件: $ apt-get install libxml2 libxslt 然后就可以: $ gem install nokogiri 可选项nokogiri提供了一些解析文件时的可选项,常用的有: NOBLANKS : 删除空节点 NOENT : 替代实体 NOERROR : 隐藏错误报告 STRICT : 精确解析,当解析到文件异常时抛出错误 NONET : 在解析期间禁止任何网络连接. 可选项使用方式举例(通过块调

Ruby学习笔记二帮助生成Vim添加代码头的代码_ruby专题

脚本语言真是太强了. 我的目的是把我的默认代码头功能加到Vim里面. /****************************************************************************** * COPYRIGHT NOTICE * Copyright (c) 2014 All rights reserved * ----Stay Hungry Stay Foolish---- * * @author : Shen * @name : * @file : G