信号量控制线程同步

信号量控制线程同步

ID:38722265

大小:77.00 KB

页数:11页

时间:2019-06-18

信号量控制线程同步_第1页
信号量控制线程同步_第2页
信号量控制线程同步_第3页
信号量控制线程同步_第4页
信号量控制线程同步_第5页
资源描述:

《信号量控制线程同步》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、北京理工大学珠海学院课程设计ZHUHAICAMPAUSOFBEIJINGINSTITUTEOFTECHNOLOGY班级09级三班学号090202031009姓名刘宏吉指导教师王震成绩实验题目信号量控制线程同步实验时间2011年12月2日 设计内容:程序1:1.两个线程,一者输出1-30的偶数,一者输出1-30的奇数。2.使用一个信号量,控制二线程分别输出(即一个线程完成数据输出后,另一个线程方可开始数据输出。)3.使用二个信号量,控制二线程其中之一输出一个数后,随后另一个线程也输出一个数,交替输出直至结束。程序2:(教材P98页51题)假

2、设一个大学为了卖弄其政治上的正确性,准备把美国最高法院的信条“平等但隔离其本身就是不平等”既运用在种族上也运用在性别上,从而结束校园内长期使用的浴室按性别隔离的做法。但是,为了迁就传统习惯,学校颁布法令:当有一个女生在浴室里,那么其他女生可以进入,但是男生不行,反之亦然。在每个浴室的门上有一个滑动指示符号,表示当前处于以下三种可能状态之一:l空l有女生l有男生用你偏好的程序设计语言编写下面过程(可以随意采用所希望的计数器和同步技术):lwoman_wants_to_enterlman_wants_to_enterlwoman_leaves

3、lman_leaves设计要点与关键技术:1.线程的同步与互斥2.信号量上的P、V操作算法3.使用VisualStudio2008开发平台信号量控制线程同步该任务含两个程序的设计与编写,程序1同步两个线程,其一输出奇数,另一线程输出偶数,且二者交叉数据输出;本程序采用了C++语言完成,需要涉及到函数主要有3个。程序2实现男女共用浴室的情况下的同步与互斥,男女到达浴室的时间数据放在文本文件。对于给定的输入文件,观察测试输出结果的正确性。本程序采用了C++语言完成,需要设计到函数主要有3个。关键词:奇数偶数同步互斥信号量1.程序流程图开始1.

4、1程序1流程图i<30输出偶数输出奇数Y结束N否是否是结束男的进入浴室女的进入浴室浴室是否有男的?开始浴室是否为空?2.1程序2流程图2.代码设计2.1程序12.1.1控制线程输出地信号量类Semaphore.java:packagewinds.synchronous;/***定义信号量的操作*@authorAdministrator**/publicclassSemaphore{privateintsemValue;publicSemaphore(intsemValue){this.semValue=semValue;}/***P操作,

5、信号量减一*/publicsynchronizedvoidp(){semValue--;if(semValue<0){try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}}/***V操作,信号量加一*/publicsynchronizedvoidv(){semValue++;if(semValue>=0){this.notifyAll();}}publicintgetSemValue(){returnsemValue;}}2.1.2交叉打印1-30的奇数和

6、偶数packagewinds.synchronous;/***交叉打印1-30的奇数和偶数*@authorchenmo**/publicclassSynchronous{Semaphoresem1;Semaphoresem2;publicSynchronous(Semaphoresem1,Semaphoresem2){this.sem1=sem1;this.sem2=sem2;}publicstaticvoidmain(String[]args){Semaphoresem1=newSemaphore(1);Semaphoresem2=ne

7、wSemaphore(0);Synchronoussynchronous=newSynchronous(sem1,sem2);Threadth1=synchronous.newThread1();Threadth2=synchronous.newThread2();th1.start();th2.start();}//打印1-30的奇数线程类classThread1extendsThread{publicvoidrun(){sem1.p();for(inti=1;i<=30;i++){if(i%2!=0){System.out.print

8、(i+"");sem2.v();if(i<30){sem1.p();}}try{this.sleep(300);}catch(InterruptedExceptione){//TODOAuto

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。