ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)
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线程的输出完成再关闭此进程
相关推荐
-
ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)
Ruby线程实现经典的生产者消费者问题,用ruby中的Queue类实现线程同步问题. 复制代码 代码如下: require "thread" puts "ProAndCon" queue = Queue.new #用队列Queue实现线程同步 producer = Thread.new do 10.times do |i| sleep rand(i) # 让线程睡眠一段时间 queue << i
-
Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解
前言 前面的例子都是多个线程在做相同的操作,比如4个线程都对共享数据做tickets–操作.大多情况下,程序中需要不同的线程做不同的事,比如一个线程对共享变量做tickets++操作,另一个线程对共享变量做tickets–操作,这就是大名鼎鼎的生产者和消费者模式. 正文 一,生产者-消费者模式也是多线程 生产者和消费者模式也是多线程的范例.所以其编程需要遵循多线程的规矩. 首先,既然是多线程,就必然要使用同步.上回说到,synchronized关键字在修饰函数的时候,使用的是"this"
-
Golang rabbitMQ生产者消费者实现示例
目录 消费者 生产者 消费者 package main import ( "fmt" "github.com/streadway/amqp" ) func failOnError(err error, msg string) { if err != nil { fmt.Println("%s: %s", msg, err) } } // 只能在安装 rabbitmq 的服务器上操作 func main() { conn, err := amqp.
-
Java如何通过线程解决生产者/消费者问题
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示 生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品.互相等待,从而发生死锁. 以下实例演示了如何通过线程解决生产者/消费者问题: /* author by javaidea.com ProducerConsumerTest.java */ public
-
Lock、Condition实现简单的生产者消费者模式示例
复制代码 代码如下: 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基于Lock的生产者消费者模型示例
本文实例讲述了Java基于Lock的生产者消费者模型.分享给大家供大家参考,具体如下: 前面一篇<Java锁机制Lock用法>简单介绍了锁机制,这里进一步分析一下基于lock的生产者消费者模型. package com.expgiga.JUC; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Reentra
-
java解决单缓冲生产者消费者问题示例
经典的生产者消费者问题模拟.此程序模拟最简单情形--单缓冲.为模拟实际情况,consume item和produce item时加了延时,可以通过修改延时模拟不同的生成消费速率. [code] [/co/** * single buffer consumer-producer problem. * by xu(xusiwei1236@163.com). * */public class ConsumerProducer { static Object buffer = null; static
-
Ruby中用线程实现经典的生产者消费者问题代码实例
示例代码: 复制代码 代码如下: require "thread" puts "ProAndCon" queue = Queue.new #用队列Queue实现线程同步 producer = Thread.new do 10.times do |i| sleep rand(i) # 让线程睡眠一段时间 queue << i puts "#{i} produced&
-
JAVA生产者消费者(线程同步)代码学习示例
一.问题描述 生产者消费者问题是一个典型的线程同步问题.生产者生产商品放到容器中,容器有一定的容量(只能顺序放,先放后拿),消费者消费商品,当容器满了后,生产者等待,当容器为空时,消费者等待.当生产者将商品放入容器后,通知消费者:当消费者拿走商品后,通知生产者. 二.解决方案 对容器资源加锁,当取得锁后,才能对互斥资源进行操作. 复制代码 代码如下: public class ProducerConsumerTest { public static void main(String []args
-
Java实现生产者消费者问题与读者写者问题详解
1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品.解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步:(2)在生产者和消费者之间建立一个管道.第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式.第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强. 同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性.常
随机推荐
- AJAX 动态获取当前时间(php)
- 使用jQuery将多条数据插入模态框的实现代码
- json2.js的初步学习与了解
- Vue.js组件tab实现选项卡切换
- c++ STL set_difference set_intersection set_union 操作
- JavaScript中的无阻塞加载性能优化方案
- ASP.NET(C#) Web Api通过文件流下载文件的实例
- ASP.NET 图片防盗链的实现原理分析
- php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
- 学习php设计模式 php实现抽象工厂模式
- 老生常谈javascript的类型转换
- ASP.NET在线文本编辑控件的使用(第6节)
- 火狐下table中创建form导致两个table之间出现空白
- Java的作业调度类库Quartz基本使用指南
- C++ 通过指针实现多态实例详解
- python通过pil将图片转换成黑白效果的方法
- iOS 10 和Xcode8 一起 创建 Siri 功能步骤详解(OC写的 )
- JavaWeb禁止浏览器缓存当前Web页面的方法
- laravel5.1框架基础之路由详解
- Nginx设置wordpress伪静态的方法示例