34管程内容摘要:

en V()。 • else V()。 霍尔方法实现五个哲学家吃通心面问题 (1) • TYPE diningphilosophers = MONITOR • var state : array[0..4] of (thinking, hungry, eating)。 • s : array[0..4] of semaphore。 • scount : array[0..4] of integer。 • define pickup, putdown。 • use wait, signal; 霍尔方法实现五个哲学家吃通心面问题 (2) • procedure test(k : 0..4)。 • begin • if state[(k1) mod 5]eating and state[k]=hungry and state[(k+1) mod 5]eating then begin • state[k] := eating。 • signal(s[k], scount[k], IM)。 • end。 • end。 霍尔方法实现五个哲学家吃通心面问题 (3) • procedure pickup(i:0..4)。 • begin • state[i] := hungry。 • test(i)。 • if state[i]eating then wait(s[i],scount[i],IM); • end。 霍尔方法实现五个哲学家吃通心面问题 (4) • procedure putdown(i:0..4)。 • begin • state[i] := thinking。 • test((i1) mod 5)。 • test((i+1) mod 5)。 • end。 • begin • for i := 0 to 4 do state[i] := thinking; • end。 • 霍尔方法实现五个哲学家吃通心面问题 (6) • cobegin • process philosopheri • begin • …… • P()。 • call (i)。 • if 0 then V()。 • else V()。 • 吃通心面; • P()。 • call (i)。 • if 0 then V()。 • else V()。 • …… • end。 • coend。 管程实现:汉森方法 (1) •汉森方法的管程中的过程所执行的signal操作一定是过程体的最后一个操作 , 一个进程当所调用的过程执行了signal操作后 , 便立即退出了管程。 •汉森方法使用四条原语: wait, signal,check, re1ease实现对管程的控制。 管程的实现:汉森方法 (2) 每个管程使用的一个数据类型 : TYPE interf = RECORD intsem : semaphore。 /* 开放管程的信号量 */ count1 : integer。 /* 等待调用的进程个数 */ count2 : integer。 /* 调用了管程中的过程且不 END。 处于等待状态的进程个数 */ 管程的实现:汉森方法 (3) •调用查看原语 check: 如果管程是开放的 , 则执行这条原语后关闭管程 , 相应进程继续执行;如果管程是关闭的 , 则执行这条原语后相应进程被置成等待调用状态 管程的实现:汉森方法 (4) procedure check(var IM interf)。 begin if = 0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。