346进程的挂起和激活当出现了引起进程挂起的事件时,用(编辑修改稿)内容摘要:

while(true){ p(mutex) p(mutex) 临界区代码 临界区代码 v(mutex) v(mutex) … … } } } } coend 进程管理 27 用信号量解题的关键 步骤:  信号量的设置 ;  给信号量赋初值 (常用的互斥和同步信号量值的大小);  P、 V操作安排的位置 (其中, P的顺序不能颠倒, V的顺序任意) 注意区分 1) 公用信号量 ,互斥时使用的信号量 (二元信号量):它仅允许取值为 “ 0 ” 与 “ 1 ” ,用作互斥。 它联系着一组共行进程,初值为1,每个进程均可对之施加P、V操作。 2) 私用信号量: 一般信号量 (资源信号量):它联系着一组共行进程,但其初值为0,或为某个正整数n,表示资源的数目,主要用于进程同步。 只允许拥有它的 进程对之施加P操作。 进程管理 28 用信号量机制解决前趋图问题  方法: 若图中存在结点 S1指向结点 S2的有向边,表示进程 P1中的程序段 S1应该先执行,而进程P2中的程序段 S2后执行。 设置一个信号量 s,初值为 0,将 V(s)放在 S1后面,而在 S2前面先执行P(s)。  进程 P1的语句序列为: S1。 V(s)  进程 P2的语句序列为: P(s)。 S2 S1 S1 S2 s S1 S3 S2 S4 S5 S6 S7 S8 例 1 利用信号量来描述前趋图关系 进程管理 30 具有 8个结点的前趋图。 图中的前趋图中共有有向边 10条 , 可设 10个信号量 , 初值均为 0;有 8个结点 , 可设计成 8个并发进程 , 具体描述如下: S1 S3 S2 S4 S5 S6 S7 S8 a g e f b c d h i j 进程管理 31 Struct smaphore a,b,c,d,e,f,g,h,I,j=0,0,0,0,0,0,0,0,0,0 cobegin {S1。 V(a)。 V(b)。 V(c)。 } {P(a)。 S2。 V(d)。 } {P(b)。 S3。 V(e)。 V(f)。 } {P(c)。 S4。 V(g)。 } {P(d)。 P(e)。 S5。 V(h)。 } {P(f)。 P(g)。 S6。 V(i)} {P(h)。 P(i)。 S7。 V(j)。 } {P(j)。 S8。 } coend S1 S3 S2 S4 S5 S6 S7 S8 a g e f b c d h i j 进程管理 32  例 2:已知一个求值公式 ( A2+3B)/(B+5A),若 A,B已赋值 , 试画出该公式求值过程的前趋图。  解:在该公式的求值过程中 , 有些运算分量的执行是可以并发执行的。 为了描述方便 , 可设置一些中间变量保存中间结果 , 并给每个语句命名 , 其求值过程如下: S1 S4 S6 S5 S3 S2 S1:x1=A*A S2:x2=3*B S3:x3=5*A S4:x4=x1+x2 S5:x5=B+x3 S6:x6=x4/x5 开始 结束 ( A2+3B) /(B+5A) 作业 如下图具有 6个节点的前驱图,利用信号量机制来解决该前驱图所描述的并发执行的过程。 S1 S1 S1 S1 S1 S1 进程管理 35 1: 生产者-消费者 的同步问题 举例: 生产者把产品生产出来 , 送入仓库。 给 消费者发信号 , 消费者得到信号后 , 到仓库 取产品 , 取走产品后给生产者发信号 …… 产品 仓 库 一个生产者 一个消费者 进程管理 36 Begin procedure c s1,s2:sem。 begin s1:=1。 s2:=0。 L2: 想取产品 Cobegin P(s2)。 procedure p 取产品; begin V(s1)。 L1:生产产品; goto L2。 p(s1)。 end 放产品; Coend V(s2)。 End got。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。