- 2
- 0
- 约2.75千字
- 约 6页
- 2019-07-03 发布于浙江
- 举报
生产者-消费者问题是一个经典的进程同步问题,已经属于化石级别的了。该问题最早由Dijkstra提出,用以演示他提出的信号量机制。要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
?? 要求设计并实现一个进程,该进程拥有一个生产者线程和一个消费者线程,它们使用N个不同的缓冲区(N为一个自定义的确定的数值,例如N=32)。需要使用如下信号量:
一个互斥信号量,用以阻止生产者线程和消费者线程同时操作缓冲区列表;
一个信号量,当生产者线程生产出一个物品时可以用它向消费者线程发出信号;
一个信号量,消费者线程释放出一个空缓冲区时可以用它向生产者线程发出信号;
看代码吧:
//pv操作:生产者与消费者经典问题//author:leaf#include stdio.h#include stdlib.h#include unistd.h#include pthread.h#include semaphore.h#define M 32 ????????????/*缓冲数目*/#define P(x) ????sem_wait(x)#define V(x)????sem_post(x)int in = 0; ????????/*生产者放置产品的位置*/int out = 0; ????????????/*消费者取产品的位置*/int buff[M] = {0}; ????/*缓冲初始化为0, 开始时没有产品*/sem_t empty_sem; ????????/*同步信号量,当满了时阻止生产者放产品*/sem_t full_sem; ????????/*同步信号量,当没产品时阻止消费者消费*/pthread_mutex_t mutex; /*互斥信号量, 一次只有一个线程访问缓冲*//*?*output the buffer?*/void print(){????int i;????for(i = 0; i M; i++)????????printf(%d , buff[i]);????printf(\n);}/* ?*producer ?*/void *producer(){????for(;;)????{????????sleep(1);????????P(empty_sem);????????pthread_mutex_lock(mutex);????????in = in % M;????????printf((+)produce a product. buffer:);????????buff[in] = 1; ????????print(); ????????++in;????????pthread_mutex_unlock(mutex);????????V(full_sem); ????}}/* ?*consumer?*/void *consumer(){????for(;;)????{????????sleep(2);????????P(full_sem);????????pthread_mutex_lock(mutex);????????out = out % M;????????printf((-)consume a product. buffer:);????????buff[out] = 0;????????print();????????++out;????????pthread_mutex_unlock(mutex);????????V(empty_sem);????}}void sem_mutex_init(){????/*???? *semaphore initialize???? */????int init1 = sem_init(empty_sem, 0, M);????int init2 = sem_init(full_sem, 0, 0); ????if( (init1 != 0) (init2 != 0)) ????{????????printf(sem init failed \n);????????exit(1);????}????/*???? *mutex initialize???? */????int
您可能关注的文档
- 仓saas平台产品使用合同(模板).doc
- 办公室绿植养护标准及工作流.docx
- 城市广场舞调查问卷总数据汇总.docx
- 标志牌工程施工方案.doc
- 仓储合同样本.docx
- 办公室文员实习周记20篇.doc
- 城市轨道交通车站公共区装修装饰施工管理要点.doc
- 仓库安全操作规程.doc
- 城市轨道交通大型换乘站客流特性及组织方法研究.docx
- 城市建设用地分类中英文对照表.docx
- 2026—2028年中国地下水污染治理服务行业生态全景与战略纵深研究报告:政策、技术、资本与消费四重驱动下的产业重构与机遇地图.pptx
- 糖尿病早期预防.pptx
- ESD术护理查房PPT课件.pptx
- 化脓性脑膜炎护理查房.pptx
- 2026—2028年中国地震安全性评价服务行业生态全景与战略纵深研究报告:政策、技术、资本与消费四重驱动下的产业重构与机遇地图.pptx
- 某人造肉企业因“肉”字使用受限改称“细胞蛋白”的标签争议_2026年1月.docx
- 2026—2028年中国地震监测预报服务行业生态全景与战略纵深研究报告:政策、技术、资本与消费四重驱动下的产业重构与机遇地图.pptx
- 某逝者社交账号被AI复活用于商业代言的伦理争议案例_2026年5月.docx
- 某提醒药盒因网络故障致漏服药物的可靠性风险测试_2026年5月.docx
- 乙型肝炎肝硬化代偿期护理查房 (1).pptx
最近下载
- 健康减脂专家—变啦V1.2发布.doc VIP
- 比亚迪唐dm2015款旗舰版说明书.doc VIP
- 四篇对照“学习贯彻党的创新理论、加强党性锤炼、联系服务群众、发挥先锋模范作用、改作风树新风”等五个方面2026年组织生活会对照检查材料.docx VIP
- FMEA手册最新中文版整理(第五版).pdf VIP
- 68万吨年煤制甲醇项目精馏工段工艺设计.doc
- 全球化背景下海外中国公民领事保护体系的构建与完善研究.docx VIP
- 写人外貌作文教学课件.ppt VIP
- 2012款东风标致508用户使用手册.pdf
- 年产吨碳酸饮料工厂设计.docx VIP
- 2026届湖南长沙长郡教肓集团重点中学中考语文最后冲刺模拟试卷含解析.doc
原创力文档

文档评论(0)