欢迎来到天天文库
浏览记录
ID:57036484
大小:356.00 KB
页数:43页
时间:2020-07-27
《进程同步讲解课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.6进程同步3.6.1同步的概念3.6.2私用信号量3.6.3用PV原语操作实现同步3.6.4经典进程同步问题3.6.1同步的概念并发进程之间存在相互制约关系进程P1:进程P2:L1:P(S)L2:V(S)信号量初值:S=0同步:一个进程到达了某写点后,除非另一个进程已经完成了某写操作,否则就不得不停下来等待这些操作的结果,这就是进程同步。用消息wait(消息名)等待合作进程发来消息用消息signal(消息名)表示向合作进程发去消息初始Bufempty=n(缓冲区个数),Buffull=0并发进程之间存在相互制约关系Pc:….P
2、p:…….A:wait(Bufempty)B:wait(Buffull)计算得到计算结果打印Buf中的数据Buf←计算结果清除Buf中的数据Bufempty←falseBuffull←falseSignal(Buffull)Signal(Bufempty)GotoAGotoB3.6.2私用信号量就是信号量与制约进程及被制约进程有关而不是与整组并发进程有关。该信号量为私用信号量(privatesemaphere)。互斥时使用的信号量为公用信号量3.6.3用PV原语实现进程同步有了私用信号量,用P,V原语操作可以实现进程间的同步。例如:P
3、a为发送进程,由deposit(data)调用发送过程。Pb为接收进程,remove(data)调用接收过程。Pa的私用信号量Bufempty,初值nPb的私用信号量Buffull,初值0Pa:deposit(data):Pb:remove(data):beginlocalxbeginlocalxP(Bufempty);P(Buffull);按FIFO方式选择一空Buf(x)按FIFO方式选择一满Buf(x)Buf(x)←datadata←Buf(x)Buf(x)置满标志Buf(x)置空标志V(Buffull)V(Bufempty)e
4、ndend3.6.4经典进程同步问题1.生产者-消费者问题(theproducer-consumerproblem)问题描述:若干进程通过有限的共享缓冲区交换数据。其中,"生产者"进程不断写入,而"消费者"进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。采用信号量机制:full是“满”数目,初值为0,avail是“空”数目,初值为N。实际上,full和avail是同一个含义:full+avail==Nmutex用于访问缓冲区时的互斥,初值是1每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否
5、互斥――否则可能死锁采用AND信号量集:Swait(avail,mutex),Ssignal(full,mutex),…Q:j=0;while(true){P(full);P(mutex);从Buffer[j]取产品;V(mutex);V(avail);消费产品;j=(j+1)%n;};P:i=0;while(true){生产产品;P(avail);P(mutex);往Buffer[i]放产品;V(mutex);V(full);i=(i+1)%n;};P(mutex);P(avail);设某一时刻mutex=1,avail=
6、0,若P进程优先于Q进程P(avail);P(mutex);2.读者-写者问题(thereaders-writersproblem)问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个“读-写”互斥,“写-写”互斥,"读-读"允许采用信号量机制:S表示"允许写",初值是1。公共变量Rc表示“正在读”的进程数,初值是0;Sr表示对rc互斥操作,初值是1。P(sr);rc=rc+1;Ifrc=1thenP(s);V(sr);read;P(sr);rc=rc-1;ifrc=0thenv(s)V(sr);Rea
7、derP(s);write;V(s);Writer采用一般"信号量集"机制:问题增加一个限制条件:同时读的"读者"最多R个Wmutex表示"允许写",初值是1Rcount表示"允许读者数目",初值为R3.哲学家进餐问题(thediningphilosophersproblem)问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出
8、现相邻者同时要求进餐;不出现有人永远拿不到筷子;解决的方案一个信号量表示一支筷子,五个信号量构成一信号量数组。信号量数组定义如下:VarS:array[0,1,2,3,4]ofsemaphore:=(1,1,1,1,1)
此文档下载收益归作者所有