版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 2.4 2.4 经典进程的同步问题经典进程的同步问题 在多道程序环境下,进程同步问题十分在多道程序环境下,进程同步问题十分重要,出现一系列经典的进程同步问题,其重要,出现一系列经典的进程同步问题,其中有代表性有:中有代表性有:生产者生产者消费者问题消费者问题哲学家进餐问题哲学家进餐问题读者读者写者问题写者问题一、一、“生产者生产者消费者消费者”问题问题n问题描述:问题描述: “生产者生产者-消费者消费者”问题是最著名的进问题是最著名的进程同步问题。它描述了一组生产者向一组消费程同步问题。它描述了一组生产者向一组消费者提供产品,它们共享一个缓冲池(有者提供产品,它们共享一个缓冲池(有n n个缓
2、个缓冲区),生产者向其中投放产品,消费者从中冲区),生产者向其中投放产品,消费者从中取得产品。取得产品。 它是许多相互合作进程的抽象,如输入进它是许多相互合作进程的抽象,如输入进程与计算进程;计算进程与打印进程等。程与计算进程;计算进程与打印进程等。一、一、“生产者生产者消费者消费者”问题问题n一个生产者,一个消费者,公用一个缓冲区一个生产者,一个消费者,公用一个缓冲区 定义两个同步信号量:定义两个同步信号量: empty empty表示缓冲区是否为空,初值为表示缓冲区是否为空,初值为n n。 full full表示缓冲区中是否为满,初值为表示缓冲区中是否为满,初值为0 0。生产一个产品生产一
3、个产品取出一个产品取出一个产品生产者生产者缓冲区缓冲区一、一、“生产者生产者消费者消费者”问题问题生产者进程:生产者进程:while(TRUE)while(TRUE) 生产一个产品生产一个产品; ; P(empty); P(empty); 把产品送往把产品送往Buffer;Buffer; V(full); V(full); 消费者进程:消费者进程:while(TRUE)while(TRUE) P(full); P(full); 从从BufferBuffer取出一个产品取出一个产品; ; V(empty); V(empty); 消费产品消费产品; ; 一、一、“生产者生产者消费者消费者”问题问题
4、nM M个生产者,个生产者,K K个消费者,公用有个消费者,公用有n n个缓冲区的缓冲池个缓冲区的缓冲池 一、一、“生产者生产者消费者消费者”问题问题nM M个生产者,个生产者,K K个消费者,公用有个消费者,公用有n n个缓冲区的缓冲池个缓冲区的缓冲池 设缓冲池的长度为设缓冲池的长度为n n(n0n0),一群生产者进程),一群生产者进程P1,P2,P1,P2,,PmPm,一群消费者进程,一群消费者进程C1,C2,C1,C2,,CkCk,如,如图所示。假定生产者和消费者是相互等效,只要缓图所示。假定生产者和消费者是相互等效,只要缓冲池未满,生产者就可以把产品送入缓冲区,类似冲池未满,生产者就可
5、以把产品送入缓冲区,类似地,只要缓冲池未空,消费者便可以从缓冲区取走地,只要缓冲池未空,消费者便可以从缓冲区取走产品并消耗它。生产者和消费者的同步关系将禁止产品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲池输送产品,也禁止消费者从空生产者向满的缓冲池输送产品,也禁止消费者从空的缓冲池提取产品。的缓冲池提取产品。n设置两个同步信号量及一个互斥信号量设置两个同步信号量及一个互斥信号量emptyempty:说明空缓冲区的数目,其初值为缓冲池的:说明空缓冲区的数目,其初值为缓冲池的大小大小n n,表示消费者已把缓冲池中全部产品取走,表示消费者已把缓冲池中全部产品取走,有有n n个空缓冲区可
6、用。个空缓冲区可用。fullfull:说明满缓冲区的数目(即产品数目),其:说明满缓冲区的数目(即产品数目),其初值为初值为0 0, ,表示生产者尚未把产品放入缓冲池,表示生产者尚未把产品放入缓冲池,有有0 0个满缓冲区可用。个满缓冲区可用。mutex: mutex: 说明该缓冲池是一临界资源,必须互斥说明该缓冲池是一临界资源,必须互斥使用,其初值为使用,其初值为1 1。 “生产者生产者消费者消费者”问题的解决问题的解决n“生产者生产者消费者消费者”问题的同步算法描述问题的同步算法描述 semaphore full=0; /*表示满缓冲区的数目表示满缓冲区的数目*/ semaphore emp
7、ty=n; /*表示空缓冲区的数目表示空缓冲区的数目*/ semaphore mutex=1; /*表示对缓冲池进行操作的互斥信表示对缓冲池进行操作的互斥信号量号量*/main() cobegin producer(); consumer(); coend “生产者生产者消费者消费者”问题的解决问题的解决 while(true) while(true) 生产一个产品放入生产一个产品放入nextp; nextp; P(empty); P(empty); P(mutex); P(mutex); Bufferin=nextp; Bufferin=nextp; in=(in+1) mod n; in=
8、(in+1) mod n; V(mutex); V(mutex); V(full); V(full); producer() while(true) while(true) P(full); P(full); P(mutex); P(mutex); nextc =Bufferout; nextc =Bufferout; out=(out+1) mod n; out=(out+1) mod n; V(mutex);V(mutex); V(empty); V(empty); 消费消费nextcnextc中的产品;中的产品; consumer()“生产者生产者- -消费者消费者”问题中应注意问题中应
9、注意1. 1. 互斥信号量的互斥信号量的P P、V V操作在每一进程中必须成操作在每一进程中必须成对出现。对出现。2. 2. 对资源信号量对资源信号量(full,empty)(full,empty)的的P P、V V操作也必操作也必须成对出现,但可分别处于不同的程序中。须成对出现,但可分别处于不同的程序中。3. 3. 多个多个P P操作顺序不能颠倒。操作顺序不能颠倒。4. 4. 先执行资源信号量的先执行资源信号量的P P操作,再执行互斥信操作,再执行互斥信号量的号量的P P操作,否则可能引起进程死锁。操作,否则可能引起进程死锁。“生产者生产者- -消费者消费者”问题中应注意问题中应注意5. 5
10、. 它是一个同步问题:它是一个同步问题: (1 1)消费者想要取产品,缓冲池中至少有)消费者想要取产品,缓冲池中至少有一个缓冲区是满的。一个缓冲区是满的。 (2 2)生产者想要放产品,缓冲池中至少有)生产者想要放产品,缓冲池中至少有一个缓冲区是空的。一个缓冲区是空的。6. 6. 它是一互斥问题它是一互斥问题 缓冲池是临界资源,因此,各生产者进程缓冲池是临界资源,因此,各生产者进程和各消费者进程必须互斥访问。和各消费者进程必须互斥访问。用管程机制解决生产者用管程机制解决生产者消费者问题消费者问题1 1、建立、建立Producer-consumer(PC)Producer-consumer(PC)
11、管程管程 Type PC=monitor var in,out,count:integer; buffer:array0,n-1 of item; notfull,notempty:condition; put(item); get(item); begin in:=out:=0; /* 初始化代码初始化代码*/ count:=0; end管程中的两个条件变量:管程中的两个条件变量: (1) notfull (1) notfull 表示表示等待未满缓冲区(空缓等待未满缓冲区(空缓冲区)。冲区)。 (2)notempty (2)notempty 表示等表示等待未空缓冲区(满缓冲待未空缓冲区(满缓
12、冲区)。区)。用管程机制解决生产者用管程机制解决生产者消费者问题消费者问题1 1、建立、建立Producer-consumer(PC)Producer-consumer(PC)管程管程n put(item)put(item)过程过程 生产者利用此过程将自己生产的产品放到缓冲生产者利用此过程将自己生产的产品放到缓冲池中,若发现缓冲池已满池中,若发现缓冲池已满(count n),则等待则等待。nget(item)get(item)过程过程 消费者利用此过程将缓冲池中的产品取走,若消费者利用此过程将缓冲池中的产品取走,若发现缓冲池已空发现缓冲池已空(count 0),则等待则等待。 put(item
13、) get(item)put(item) get(item)Procedure entry put(item) begin if count = n then notfull.wait; buffer(in):=nextp; in:=(in+1) mod n; count:=count+1; if notempty.queue then notempty.signal; endProcedure entry get(item) begin if count = 0 then notempty.wait; nextc:=buffer(out); out:=(out+1) mod n; count
14、:=count-1; if notfull.queue then notfull.signal; end2 2、生产者、生产者消费者问题的解决消费者问题的解决Producer:begin repeat produce an item in nextp; PC.put(item); until false endConsumer:begin repeat PC.get(item); consume the item in nextc; until false end二、二、“哲学家进餐哲学家进餐”问题问题n问题描述:问题描述: 有五个哲学家,他们的生活方式是交替地进行有五个哲学家,他们的生活方式
15、是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子又继续思考。餐毕,放下筷子又继续思考。n哲学家进餐问题可看作是并发进程并发执行时,处哲学家进餐问题可看作是并发进程并发执行时,处理共享资源的一个有代表性的问题。理共享资源的一个有代表性的问题。n semaphore sti
16、ck5=1,1,1,1,1; /*分别表示分别表示5支筷子支筷子*/ main() cobegin philosopher(0); philosopher(1); philosopher(2); philosopher(3); philosopher(4); coend 哲学家进餐问题的解决哲学家进餐问题的解决 while(true) while(true) 思考思考; ; P(sticki); P(sticki); P(stick(i+1) mod 5); P(stick(i+1) mod 5); 进餐;进餐; V(sticki); V(sticki); V(stick(i+1) mod 5
17、); V(stick(i+1) mod 5); 第第i i个哲学家的活动算法个哲学家的活动算法philosopher(int i)说明:说明:1 1、此算法可以、此算法可以保证不会有保证不会有相邻的两位哲学家同时进餐相邻的两位哲学家同时进餐。2 2、若五位哲学家同时饥饿、若五位哲学家同时饥饿而各自拿起了左边的筷子,而各自拿起了左边的筷子,这使五个信号量这使五个信号量stickstick均为均为0 0,当他们试图去拿起右边的筷当他们试图去拿起右边的筷子时,都将因无筷子而无限子时,都将因无筷子而无限期地等待下去,即期地等待下去,即可能会引可能会引起死锁起死锁。n上述解法可能出现永远等待,有若干种上
18、述解法可能出现永远等待,有若干种办法可避免办法可避免死锁死锁:n至多允许四个哲学家同时进餐(解决方法至多允许四个哲学家同时进餐(解决方法一);一);n奇数号先取左手边的筷子,偶数号先取右手奇数号先取左手边的筷子,偶数号先取右手边的筷子(解决方法二);边的筷子(解决方法二);n每个哲学家取到手边的两只筷子才进餐,否每个哲学家取到手边的两只筷子才进餐,否则一只筷子也不取(解决方法三)。则一只筷子也不取(解决方法三)。n设置一个信号量设置一个信号量S Sm,m,其初值为其初值为4 4,用于限制同时进餐,用于限制同时进餐的哲学家数目至多为的哲学家数目至多为4 4,这样,第,这样,第i i个哲学家的活动
19、个哲学家的活动可描述为:可描述为: while(true) signal(sticki); wait(Sm); signal(stick(i+1) mod 5); wait(sticki); signal(Sm); wait (stick(i+1) mod 5); . think; eat; .解决的方法(一)解决的方法(一)解决的方法(二)解决的方法(二) while(true) signal(sticki); if odd(i) signal (stick(i+1) mod 5); wait(sticki); . wait (stick(i+1) mod 5); think; . else
20、 wait (stick(i+1) mod 5); wait(sticki); eat; .对对5 5个哲学家,假设规定:单号个哲学家,假设规定:单号者进餐时,先拿左手(者进餐时,先拿左手(i i)的筷)的筷子,然后再拿右手(子,然后再拿右手(i+1i+1)的筷)的筷子。双号则先右后左。这样既可子。双号则先右后左。这样既可使使5 5个人同时进餐,又不致产生个人同时进餐,又不致产生死锁。死锁。n利用利用ANDAND信号量机制信号量机制解决哲学家进餐问题解决哲学家进餐问题semaphore stick5=1,1,1,1,1;semaphore stick5=1,1,1,1,1;philosophe
21、r(int i)philosopher(int i) while(true) while(true) think;think;Swait(stick(i+1) mod 5,sticki);Swait(stick(i+1) mod 5,sticki);eat;eat;Ssignal(stick(i+1) mod 5,sticki);Ssignal(stick(i+1) mod 5,sticki); 解决的方法(三)解决的方法(三)三、三、“读者读者写者写者”问题问题n问题描述:问题描述: 一个数据对象(数据文件或记录)可被多个进一个数据对象(数据文件或记录)可被多个进程共享。其中,读者(程共享。
22、其中,读者(readerreader)进程要求读,写者)进程要求读,写者(writerwriter)进程要求写或修改。)进程要求写或修改。 为了保证读写的正确性和数据对象的一致性,为了保证读写的正确性和数据对象的一致性,系统要求:当有读者进程读文件时,不允许任何写系统要求:当有读者进程读文件时,不允许任何写者进程写,但允许多个读者同时读;当有写者进程者进程写,但允许多个读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何写时,不允许任何其它写者进程写,也不允许任何读者进程读。读者进程读。三、三、“读者读者写者写者”问题问题ReaderShared ResourceReaderR
23、eaderReaderReaderReaderReaderReaderWriterWriterWriterWriterWriterWriterWriter三、三、“读者读者写者写者”问题问题ReaderShared ResourceReaderReaderReaderReaderReaderReaderReaderWriterWriterWriterWriterWriterWriterWriter三、三、“读者读者写者写者”问题问题ReaderShared ResourceReaderReaderReaderReaderReaderReaderReaderWriterWriterWriterW
24、riterWriterWriterWritern“读者读者写者写者”问题的同步算法描述问题的同步算法描述 设置一个共享变量和两个信号量:设置一个共享变量和两个信号量:共享变量共享变量readcountreadcount:记录当前正在读数据集的读进:记录当前正在读数据集的读进程数目,初值为程数目,初值为0 0。读互斥信号量读互斥信号量rmutexrmutex :表示读进程互斥地访问共享:表示读进程互斥地访问共享变量变量readcountreadcount,初值为,初值为1.1.写互斥信号量写互斥信号量wmutexwmutex:表示写进程与其它进程(读、:表示写进程与其它进程(读、写)互斥地访问数据集,初值为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全科医生转岗培训考试题库及答案
- 电气配线专项施工方案
- 运动系统保健知识老年护理应用指南
- 中国教育网护理专业课件
- 2026供需调研新能源汽车市场现状分析评估投资方向规划报告
- 2026供应链管理行业现状深度剖析及未来规划与市场策略研究报告
- 医护一体化护理模式下的护理评估与计划
- 2026-2030中国衣物护洗袋行业应用趋势预测及发展前景展望报告
- 夏季设备安装施工调试方案
- 企业物流配送路线动态规划方案
- 2026年发展对象考试测试题库附答案
- 2025年石家庄市市属国有企业公开招聘应届毕业生223人笔试历年参考题库附带答案详解
- (2026版)贪污贿赂司法解释(二)培训纲要课件
- 编织袋厂工作制度范本
- 智联招聘中层竞聘笔试题库
- 2026年新能源的未来发展趋势
- 2025心肺复苏(CPR)指南(完整版)
- 社会组织岗位责任制度
- 外科术后并发症防治手册
- 北京中国新闻社2025年度面向社会招聘10人笔试历年参考题库附带答案详解
- 2026年经济开发区招聘面试企业服务对接实务练习题及解析
评论
0/150
提交评论