- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计(一号黑体加粗)
用多进程同步方法解决生产者-消费者问题
(小二黑体加粗)
院 系: 医学信息工程
班 级: 10信工(1)班
学 号:
姓 名:
同 组 者:
时 间: 2013-5-22
目录(小二黑体加粗)
一、题目: 3
二、设计目的: 3
三、总体设计思想概述: 3
四、说明: 3
五、设计要求: 3
六、设计方案: 3
七、流程图: 4
八、运行结果 4
九、源程序 7
十、总结 15
十一、参考文献 15
一、题目:(标题2,即三号黑体加粗)
用多进程同步方法解决生产者-消费者问题。
二、设计目的:
通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。
三、总体设计思想概述:
生产者—消费者问题是一种同步问题的抽象描述。
计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。
而当某个进程释放资源时,则它就相当一个生产者。
四、说明:
有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。
五、设计要求:
1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。
2、生产者和消费者各有两个以上。
3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。
六、设计方案:
1.用java语言编写程序,在Myeclipse环境下运行
2.生产者与消费者之间的关系,即用线程来产生数据或者使用数据synchronized关键字修饰方法,实现线程同步public synchronized void produce(int i)(i为当前的空缓冲区),当缓冲区不为空时,生产者进入等待队列,否则占用缓冲区(full=i,empty=false),将产品送入缓冲区,唤醒所有等待进程;
消费者线程同步:public synchronized int consume()当缓冲区为空时,消费者进入等待队列,否则消费资源(empty=true),唤醒等待进程
4. 创建一个缓冲区,将生产者与消费者联系取来,用start()启动线程
ProAndCon pc=new ProAndCon();
Producer p= new Producer(pc); //创建生产者实例
consumer c=new consumer(pc); //创建消费者实例
p.start(); //启动线程
c.start();
七、流程图:
八、运行结果
1、截图一:
2、截图二:
3、截图三:
4,截图四
九、源程序
生产者线程
public class Producer extends Thread{
private ProAndCon pro;
public Producer(ProAndCon p)
{
this.pro=p;
}
public void run()
{
for(int i=0;i20;i++)
{
try{
Thread.sleep(1000);
}
catch(InterruptedException e){}
pro.produce(i);
System.out.println(Thread.currentThread().getName()+生产者+i);
}
}
}
消费者线程
public class consumer extends Thread{
private ProAndCon con;
public consumer(ProAndCon con)
{
this.con=con;
}
public void run()
{
int i;
do
{
try{
Thread.sleep(2000);
}catch(InterruptedException e){}
i=con.consume();
System.out.println( +
文档评论(0)