#include<IceUtil/Monitor.h>
template<classT>classQueue
:publicIceUtil::Monitor<IceUtil::Mutex>{
public:
Queue():_waitingReaders(0){}
voidput(constT&item){
IceUtil::Monitor<IceUtil::Mutex>::Locklock(*this);
_q.push_back(item);
if(_waitingReaders)
notify();
}
Tget(){
IceUtil::Monitor<IceUtil::Mutex>::Locklock(*this);
while(_q.size()==0){
try{
++_waitingReaders;
wait();
--_waitingReaders;
}catch(...){
--_waitingReaders;
throw;
}
}
Titem=_q.front();
_q.pop_front();
returnitem;
}
private:
list<T>_q;
short_waitingReaders;
};
这种实现的优点是,它使发生在监控器互斥体之上的竞争降到了最低限
度:写入者每次都唤醒一个读取者,所以不会发生多个读取者同时尝试锁
住互斥体的情况。而且,监控器的 notify 只有在解除了互斥体的加锁之
后,才会向等待中的线程发出信号。这意味着,当线程从 wait中醒来、
重新尝试获取互斥体时,互斥体很可能处在未加锁状态。这会使随后的操
作更高效,因为获取未加锁的互斥体通常会非常高效,而强迫线程在锁住
的互斥体上休眠很昂贵(因为必须进行线程上下文切换) 。
分享到:
相关推荐
1.利用记录型信号量解决生产者-消费者问题.odt1.利用记录型信号量解决生产者-消费者问题.odt1.利用记录型信号量解决生产者-消费者问题.odt
利用记录型信号量解决生产者-消费者问题.doc
1.生产者消费者对缓冲区进行互斥操作。 2.缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3.生产者消费者各循环操作50次。 四、设计思路和采取的方案 1.利用windows提供的API...
该程序实现了在UCOS下对内存的管理,包括建立一个内存分区OSMemCreate(),分配一个内存块OSMemGet(),释放一个内存块OSMemPut(),查询一个内存分区的状态OSMemQuery()。 该程序建立了两个内存分区,每个分区...
阅读建议:此资源以开发简化版生产者消费者模型,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码 运行环境要求: node.js 运行步骤: 执行...
本课程设计通过模拟计算机操作系统中经典的“生产者—消费者问题”,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理等问题认识和理解,同时又了解了软件设计的流程、方法以及思想,...
Java JDK1.5后新特性,用Lock和Condtion对象解决线程安全问题,提高了效率。
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...
2、右下方为添加进程界面,可选择生产者、消费者,输入该进程开始调度的时间,和写入的数据(仅生产者),输入的进程开始调度时间要不早于最后一个加入调度列表的进程的开
1.生产者消费者对缓冲区进行互斥操作。 2.缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3.生产者消费者各循环操作50次。 四、设计思路和采取的方案 1.利用windows提供的API...
操作系统生产者消费者问题C语言.doc
操作系统课程设计生产者消费者.doc
LabVIEW生产者消费者架构串口数据高速采集.rar
FFmpeg是一套可以用来记录、转换数字...它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
实现生产者消费者问题操作系统课程设计报告.doc
主要实例分析了java中生产者消费者问题的方法,需要的朋友可以可以参考下
Streams)的生产者/消费者的简单实现它处理的事情: 多个消费者畅通无阻的消费者和生产者(演员) 背压没有锁定,通过消息传递完成同步它无法处理的事情: 多个生产者-我故意留下它是因为我正在考虑用于多个消费者的...
操作系统生产者与消费者问题实验报告.doc
也可以创建一个通用的消息生产者,在发送消息时指定消息目的地方法发送消息),创建通用的消息生产者对于实现同一个消息生产者向不同消息目的地发送消息提供了解决方案。本实例演示了如何使用后者创建消息生产者并...