生产者与消费者算法的实现.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六 信号量 厦门大学软件学院 吴清强 实验目的 加强对进程概念的理解。 进一步了解并发执行的实质。 分析进程争用资源的现象,学习解决进程互斥的方法 了解Linux系统中进程通信的基本原理 二.相关知识 进程的概念。 进程与程序的区别。 进程并发执行的概念。 进程互斥的概念 进程通信的基本原理 三.实验内容 使用信号量实现有限缓冲区的生产者和消费者问题 使用信号量实现读进程具有优先权的读者和写者问题 四.实验环境 PC + Linux Red Hat操作系统 GCC 1. 使用信号量实现有限缓冲区的生产者和消费者问题 程序流程图 开 始 开 始 是 该缓冲区是否已上锁? 是否有空缓冲区? 否 是 对该缓冲区上锁 模拟生产 解 锁 结 束 阻 塞 否 生产者进程生产流程图 开 始 开 始 是 该缓冲区是否已上锁? 是否有满缓冲区? 否 是 对该缓冲区上锁 模拟消费 解 锁 结 束 阻 塞 否 消费者进程消费流程图 源代码 1、生产者生产进程函数 DWORD WINAPI Producer(LPVOID lpParameter){ while(true){ for(int j=0;j4;j++){ if(buffer[j]==0){//找到空缓冲区 if(lock[j]==false){//同步锁为false,可以进行操作 lock[j]=true;//加锁,防止其他线程操作此缓冲区 if(buffer[j]1){//限定一个缓冲区只能存放一个资源 ++buffer[j];//模拟生产资源 cout生产一个资源,放入缓冲区j中endl; lock[j]=false;//解锁 break;//一次生产一个 } } if(j==3){ cout找不到空缓冲区,等待中。。endl; Sleep(2000); } } } } return 0; } 2、消费者消费进程函数 DWORD WINAPI Customer(LPVOID lpParameter) { while(true){ for(int n=0;n4;n++){ if(buffer[n]==1){//找到满缓冲区 if(lock[n]==false){//同步锁为false,可以进行操作 lock[n]=true;//加锁,防止其他线程操作此缓冲区 if(buffer[n]=1){ --buffer[n];//模拟消费资源 cout消费一个资源,从缓冲区n中取出endl; lock[n]=false;//解锁 break;//一次生产一个 } } } if(n==3){ cout找不到满缓冲区,等待中。。endl; Sleep(2000); }}}} 3、主函数,创建5个进程,其中3个生产者进程,2个消费者进程 int main(int argc,char* argv[]) { HANDLE handle[3]; DWORD dw1,dw2,dw3,dw4,dw5;//创建5个进程 handle[0]=CreateThread(NULL,0,Producer,NULL,0,dw1); handle[1]=CreateThread(NULL,0,Producer,NULL,0,dw2); handle[2]=CreateThread(NULL,0,Producer,NULL,0,dw3); handle[3]=CreateThread(NULL,0,Customer,NULL,0,dw4); handle[4]=CreateThread(NULL,0,Customer,NULL,0,dw5); } ·三、 试验结果 3个生产者2个消费者,共享4个缓冲区,运行结果如下: 1、一个生产者生产,一个消费者消费: 两个生产者连续生产,两个消费者连续消费: 多个生产者于多个消费者进行生产消费操作: 2. 使用信号量实现读进程具有优先权的读者和写者问题 . 程序流程图 源代码 #includeunistd.h #includesys/types.h #includesys/sem.h #includesys/mman.h #includesys/ipc.h #includestdio.h int *critica

文档评论(0)

annylsq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档