进程互斥与同步-同步

进程互斥与同步-同步

ID:43817237

大小:630.50 KB

页数:21页

时间:2019-10-15

进程互斥与同步-同步_第1页
进程互斥与同步-同步_第2页
进程互斥与同步-同步_第3页
进程互斥与同步-同步_第4页
进程互斥与同步-同步_第5页
资源描述:

《进程互斥与同步-同步》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、4.6进程同步的实现用P,V原语操作实现同步用P,V原语操作实现进程同步的方法:为各并发进程设置信号量为信号量赋初值利用P,V原语和信号量规定各进程的执行顺序。同步斥问题举例1共享缓冲区的合作进程的同步的解法计算进程cp和打印进程iop公用一个单缓冲,为了完成正确的计算与打印,试用信号灯的p、v操作实现这两个进程的同步。缓冲区bufiopcp分析任务的同步关系当cp进程把计算结果送入buf时,iop进程才能从buf中取出结果去打印,否则必须等待。当iop进程把buf中的数据取出打印后,cp进程才能把下一个计算结果数据送入buf中,否则必须等

2、待。缓冲区bufiopcp信号灯设置sa:表示缓冲区中是否有可供打印的计算结果,其初值为0。sb:表示缓冲区有无空位置存放新的信息,其初值为1。缓冲区bufiopcp同步描述cp:iop:p(sa);产生一个数据;从buf中取数据;p(sb);v(sb);将数据放入buf打印;v(sa);缓冲区bufiopcp程序描述cp()iop(){{while(计算未完成)while(打印工作未完成){{得到一个计算结果;p(sa);p(sb);从缓冲区中取一数;将数送到缓冲区中;v(sb);v(sa);从打印机上输出;}}}}程序描述main()

3、{intsa=0;∕*表示buf中有无信息*∕intsb=1;∕*表示buf中有无空位置*∕cobegincp();iop();coend}同步问题举例2-病人就诊门诊医生:……开化验单;……等化验结果;……继续诊病;化验员:……等化验单;……化验;填写化验结果;……等待等待唤醒后唤醒后需要两个信号量s1:表示化验结果是否出来,初值为0.s2:表示医生是否开化验单,初值为0.程序描述main(){ints1=0;ints2=1;cobegindoctor();test();coend}对于医生的操作步骤:doctor(){给病人看病

4、…V(s2);P(s1);继续诊病…}对于化验员的操作步骤:test(){P(s2);化验…V(s1);}同步斥问题举例3生产者——消费者问题计算进程和打印进程计算进程cp不断产生数据,是生产者;打印进程iop不断打印数据,是消费者。通信问题发消息进程send不断产生消息,是生产者;收消息进程receive不断接收消息,是消费者。生产者——消费者问题的一般解答生产者——消费者问题图示生产者与消费者的同步关系生产者:当有界缓冲区中无空位置时,要等待;向有界缓冲区放入物品后,要发消息。消费者:当有界缓冲区中无物品时,要等待;从有界缓冲区取出物品

5、后,要发消息。c1p1c2c3ckp2p3pm信号灯设置两个同步信号灯——sb:表示空缓冲区的数目,初值=nsa:表示满缓冲区(即信息)的数目,初值=0一个互斥信号灯——mutex:表示有界缓冲区是否被占用,初值=1c1p1c2c3ckp2p3pm同步描述生产者:消费者:p(sa)p(sb);p(mutex);p(mutex);有界缓冲区中取数据;将数据放入有界缓冲区;v(mutex);v(mutex);v(sb);v(sa);消费;程序描述程序prod_consmain(){intsa=0;∕*满缓冲区的数目*∕in

6、tsb=n;∕*空缓冲区的数目*∕intmutex=1;∕*对有界缓冲区进行操作的互斥信号灯*∕cobeginp1();p2();…pm();c1();c2();…ck();coend}pi()cj(){{while(生产未完成)while(还要继续消费){{p(sa);生产一个产品;p(mutex);p(sb);从有界缓冲区中取产品;p(mutex);v(empty);送一个产品到有界缓冲v(sb);v(mutex);消费一个产品;v(sa);}}}}分析:P操作的顺序----很重要P操作的顺序不当会产生死锁。例:假定执行顺序如

7、下Consumer:Producer:P(avail);P(mutex);oneunit-->buf;V(mutex);V(full);P(full);P(mutex);//进入区oneunit<--buf;V(mutex);V(avail);//退出区分析:当full=0,mutex=1时,执行顺序:Consumer.P(mutex);Consumer.P(full);//C阻塞,等待Producer发出的full信号Producer.P(avail);Producer.P(mutex);//P阻塞,等待Consumer发出的avail信

8、号思考:还有其他的执行序列可以产生死锁吗?发生死锁

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

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

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