- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 我国金融法律制度的完善.doc
- 软件工程课程设计-图书馆管理系统.doc
- 培训机构合作协议书共4篇.doc
- 黑白极简风格PPT模板26.pptx
- 康师傅绿茶包装要素分析--市场营销.ppt
- 城投公司发展规划 .doc
- 蓝海战略的实施与案例分析.ppt
- 篮球简介(室内课).ppt
- 【2015年】便利店经营中的营销策略分析—营销方案.doc
- 廉洁教育主题班会.ppt
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
最近下载
- T∕CEC 131.4-2016 铅酸蓄电池二次利用 第4部分:电池维护技术规范.pdf
- 百日咳试题附有答案.docx VIP
- 2024年广东省深圳市光明区人大常委会办公室招聘一般类岗位专干12人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx VIP
- 高中语文任务驱动型材料作文:枯燥与热闹审题指导(含解析).docx VIP
- 某镇卫生院污水设计方案.pdf VIP
- 2024年广东深圳市光明区人大常委会办公室招聘一般类岗位专干3人历年【综合基础知识500题】高频考点模拟试题及参考答案解析.docx VIP
- 中考数学经验交流会发言稿.pdf
- 2024年7月广东省深圳市光明区人大常委会办公室招聘10人历年【高频考点汇总500题】模拟卷及参考答案详解.docx VIP
- 《溜冰圆舞曲和雷鸣电闪波尔卡》精品课件2023.pptx
- 水利项目安全评价报告.docx
文档评论(0)