生产者消费者模型(为什么使用两个信号量?)
来源:互联网 发布:c语言数组教程 编辑:程序博客网 时间:2024/05/22 08:25
生产者消费者模型中需要2个信号量,1个互斥量。大致过程如下:
P操作:
申请资源,S=S-1。如果S>0,则继续。否则线程阻塞,放入等待队列。
V操作:
释放资源,S=S+1。如果S>0,则继续。否则唤醒等待队列中的第一个线程。
Semaphore empty(N), full(0);
Mutex mutex;
producer
{
empty.require(); //P操作,试图获取可用的空buffer
mutex.require();
// … insert data to buffer;
mutex.release();
full.release(); //V操作,通知有新的存有数据的buffer可用
}
consumer
{
full.require(); // P操作,试图获取可用的存有数据的buffer
mutex.require();
// …get date from buffer
mutex.release();
empty.release(); // V操作,通知有新的空buffer可用。
}
为什么要用两个信号量,使用一个是否可以?
不可以。因为producer & consumer模型中认为buffer是有限的。只用一个信号量,无法做到当资源耗尽时,让producer或者consumer线程都能挂起。对于producer资源耗尽指没有空buffer可用,对于consumer资源耗尽指没有存有数据的buffer可用。
比如producer生产一个数据则信号量增加,consumer消耗一个数据则信号量递减,似乎可以?其实不对,试想producer线程永远不会挂起(即便consumer从不消耗资源),显然不满足buffer有限的条件。
- 生产者消费者模型(为什么使用两个信号量?)
- 两个信号量实现生产者消费者模型
- 信号量(生产者和消费者模型)
- 生产者---消费者模型之信号量
- 61-System V 信号量(生产者与消费者模型)
- POSIX下的信号量(生产者&消费者模型)
- Win32信号量实现生产者消费者模型
- Win32信号量实现生产者消费者模型
- 生产者消费者问题(信号量)
- 使用信号量的生产者-消费者问题
- 生产者-消费者问题实现 使用信号量
- 1,使用信号量解决生产者-消费者问题
- 使用信号量的生产者—消费者问题
- 利用两个线程实现生产者消费者模型
- Linux信号量机制(生产者消费者)
- Linux信号量机制(生产者消费者)
- posix 信号量---生产者消费者(一)
- posix 信号量---生产者消费者(二)
- apache htpasswd命令用法详解
- 协议设计和架构
- SurfaceView Android摄像头拍照
- accessSuper() {System.out.println(super.count);
- php 弹出对话框
- 生产者消费者模型(为什么使用两个信号量?)
- GrivdView的用存储过程分面效果
- SVN 出现This client is too old to work with working copy...错误
- Java串口通信详解【非常感谢编写这篇文章的兄弟。收益良多】
- 符合推理的解决方法 NSlover
- RTEMS 移植到 sbc2440 的简要笔记
- python学习之二
- Linux下Apache+cgi的配置方法。(转) ---设置cgi-bin
- 觉得一个比较好的AI 神经网络类库AForge neuro