文档详情

Chapter 7 进程互斥和同步.ppt

发布:2018-06-10约1.41万字共89页下载文档
文本预览下载声明
设key[S]=1时表示类名为S的临界区可用,key[S]=0时表示类名为S的临界区不可用。 则,unlock(key[S])只用一条语句 即可实现。即: key[S]←1 问题分析 用加锁法解决进程互斥的问题时,一个进程能否进入临界区是依靠自己的测试。 建立一个信号量步骤: 说明所建信号量所代表的意义 赋初值 建立相应的数据结构以便指向那些 等待使用该临界区的进程。 用信号量实现两并发进程PA,PB互斥的描述如下: 1) 设sem为互斥信号量,其取值范围为(1,0,-1)。 其中sem=1 表示进程PA和PB都未进入类名为S的临界区, sem=0 表示进程PA或PB已进入类名为S的临界区, sem=-1 表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入临界区。 同步的消息实现机制 如果对一个消息或事件赋以唯一的消息名,则可用过程: wait (消息名) 表示进程等待合作进程发来的消息,而用过程 signal (消息名) 表示向合作进程发送消息。 几种通信方式都可用于大量数据传送,而且,由于其通信方式不同,需要使用不同的控制方式来达到通信进程之间同步或互斥的目的。 习题一 Dining-Philosophers Problem Shared data semaphore chopstick[5]; Initially all values are 1 Dining-Philosophers Problem Philosopher i: do { P(chopstick[i]) P(chopstick[(i+1) % 5]) … eat … V(chopstick[i]); V(chopstick[(i+1) % 5]); … think … } while (1); 习题二: 设有8个程序prog1,prog2,…prog8.它们在并发系统中执行时有如图2。1所示的制约关系,试用P,V操作实现这些程序间的同步。 程序清单 BEGIN INTEGER S13,S14,S15,S23,S24,S25; INTEGER S36,S48,S57,S68,S78; S13=S14=S15:=0; S23=S24=S25:=0; S36:=0; S48:=0; S57:=0; S68:=0; S78:=0; COBEGIN Prog1: BEGIN do all work; v(s13); v(s14); v(s15); END; prog2: BEGIN do all work; v(s23); v(s24); v(s25); END; Prog3: BEGIN P(S13); P(S23); do all work; v(36); END; Prog4: BEGIN P(S14); P(S24); do all work; v(48); END; Prog5: BEGIN P(S15); P(S25); do all work; v(57); END; prog6: BEGIN P(S36) DO ALL WORK V(S68) END PROG7: BEGIN P(S57) DO ALL WORK V(S78) END PROG8: BEGIN
显示全部
相似文档