欢迎来到天天文库
浏览记录
ID:9990857
大小:61.50 KB
页数:9页
时间:2018-05-20
《进程之间的互斥和同步》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
西安电子科技大学《操作系统原理》实验报告西安电子科技大学计算机学院实验报告题目:进程的同步与互斥专业:计算机科学与技术姓名:班级:学号:时间:2014年5月18日 西安电子科技大学《操作系统原理》实验报告实验内容补充说明无一、进程互斥1.实验内容设计实验实现线程之间的同步和互斥。实验一:售票程序模拟:给定初始票量,利用大量的线程模拟售票过程,每次售票完成后显示剩余的票量。2.理论阐述在系统中有一些需要相互合作,协同工作的的进程,它们之间的相互之间的联系称为进程之间的同步,另外的一中情况是进程因为争用临界资源而互斥,叫做进程之间的互斥,同样的道理也使用与多个线程之间。3.实现方法(不加互斥机制)对于实验一,要实现两个线程之间的互斥,需要设计一个公用的信号量S,以及设定起始的票数作为全局变量,设定线程的个数并且用threadID来加以创建,分别实现各个线程的函数。4.结果及分析如图所示实验结果,实验一中因为只定义了一个公用的信号量S1,所以每次只可以有一个线程运行,也就是说每次操作只可以卖出一张票,即线程之间是互斥的。5.解决方案#include#includeusingnamespacestd; 西安电子科技大学《操作系统原理》实验报告HANDLEs1;intsum;inti=1;DWORDthreadID[2];//创建线程voidprocess1(){while(sum){if(WaitForSingleObject(s1,INFINITE)==WAIT_OBJECT_0)//P(s1){sum=sum-1;cout<<"num"<#includeusingnamespacestd; 西安电子科技大学《操作系统原理》实验报告#defineN1HANDLEs1;HANDLEs2;voiddriver(){while(1){if(WaitForSingleObject(s1,INFINITE)==WAIT_OBJECT_0)//P(s1){cout<<"司机正在开车 ";Sleep(5000);cout<<"到站,停车 ";ReleaseSemaphore(s2,1,NULL);//V(s2)}}}voidseller(){while(1){ 西安电子科技大学《操作系统原理》实验报告if(WaitForSingleObject(s2,INFINITE)==WAIT_OBJECT_0)//P(s2){Sleep(2000);cout<<"开门,买票 ";Sleep(3000);cout<<"关门, ";ReleaseSemaphore(s1,1,NULL);//V(s1)}}}intmain(){HANDLEthread[2];//定义两线程句柄s1=CreateSemaphore(NULL,N,N,NULL);//同步信号量,初值N,最大Ns2=CreateSemaphore(NULL,0,N,NULL);//同步信号量,初值0,最大NDWORDthreadID[2];//创建线程thread[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(driver),NULL,0,&threadID[0]);Sleep(4000);thread[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(seller),NULL,0,&threadID[1]);WaitForMultipleObjects(1,thread,TRUE,INFINITE);//等待结束 西安电子科技大学《操作系统原理》实验报告//system("pause");return0;}6心得体会通过实验模拟线程之间的互斥和同步,了解到了在windows所涉及到的API函数和实现的方法,更进一步理解了同步和互斥的特点以及它们各自的应用和实现。
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处