- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信号量控制线程同步
北京理工大学珠海学院课程设计
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级 09级三班 学号 090202031009 姓名刘宏吉 指导教师 王震 成绩
实验题目 信号量控制线程同步 实验时间 2011年12月日
woman_wants_to_enter
man_wants_to_enter
woman_leaves
man_leaves
设计要点与关键技术:
线程的同步与互斥
信号量上的P、V操作算法
使用Visual Studio2008开发平台
信号量控制线程同步该任务含两个程序的设计与编写,程序1同步两个线程,其一输出奇数,另一线程输出偶数,且二者交叉数据输出;本程序采用了C++语言完成,需要涉及到函数主要有3个。程序2实现男女共用浴室的情况下的同步与互斥,男女到达浴室的时间数据放在文本文件。对于给定的输入文件,观察测试输出结果的正确性。本程序采用了C++语言完成,需要设计到函数主要有3个。
关键词:奇数 偶数 同步 互斥 信号量
1.程序流程图
1.1 程序1流程图
Y
N
2.1 程序2流程图
2.代码设计
2.1 程序1
2.1.1 控制线程输出地信号量类
Semaphore.java:
package winds.synchronous;
/**
* 定义信号量的操作
* @author Administrator
*
*/
public class Semaphore{
private int semValue;
public Semaphore(int semValue){
this.semValue = semValue;
}
/**
* P操作,信号量减一
*/
public synchronized void p(){
semValue--;
if(semValue0){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
/**
* V操作,信号量加一
*/
public synchronized void v(){
semValue++;
if(semValue=0){
this.notifyAll();
}
}
public int getSemValue(){
return semValue;
}
}
2.1.2 交叉打印1-30的奇数和偶数
package winds.synchronous;
/**
* 交叉打印1-30的奇数和偶数
* @author chenmo
*
*/
public class Synchronous {
Semaphore sem1;
Semaphore sem2;
public Synchronous(Semaphore sem1,Semaphore sem2){
this.sem1=sem1;
this.sem2=sem2;
}
public static void main(String[] args){
Semaphore sem1=new Semaphore(1);
Semaphore sem2 =new Semaphore(0);
Synchronous synchronous =new Synchronous(sem1,sem2);
Thread th1= synchronous.new Thread1();
Thread th2 = synchronous.new Thread2();
th1.start();
th2.start();
}
//打印1-30的奇数线程类
class Thread1 extends Thread{
public void run() {
sem1.p();
for(int i=1;i=30;i++){
if(i % 2 !=0){
System.out.print(i+ );
sem2.v();
if(i30){
sem1.p();
}
}
try {
this.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
您可能关注的文档
最近下载
- 智慧课堂下高中数学定理课的教学设计研究.pdf VIP
- 徕卡DNA03/DNA10 数字水准仪说明书.docx VIP
- 牦牛标准化育肥场布局及圈舍建设规范.docx VIP
- 手术室护理不良事件管理.pptx
- 李脂肪栓塞综合征的护理.ppt
- BS EN IEC 62501-2024 Voltage sourced converter (VSC) valves for high-voltage direct current (HVDC) power transmission — Electrical testing 高压直流动力传输用电压源换流阀ー电气试验.pdf
- 2022年全国甲卷统一高考物理试卷(附答案).pdf VIP
- 个人简历——【标准模板】.doc VIP
- 行政人事管理成套个人简历Word模板(高端绿色).docx VIP
- 一般过去时知识点及练习.docx VIP
文档评论(0)