ch33.4管程概要1.pptVIP

  • 7
  • 0
  • 约1.01万字
  • 约 50页
  • 2017-07-02 发布于湖北
  • 举报
ch33.4管程概要1

管程的实现:汉森方法(10) procedure signal(var s:condition; var IM interf); begin if s 0 then begin s := s – 1; IM.count2 := IM.count2 + 1; R(s); end; end; 管程的实现:汉森方法(11) 用管程实现进程同步时,进程应按下列次序工作: ?????? 请求资源。 ?????? 使用资源。 ?????? 释放资源。 汉森管程实现读者写者问题(1) 有两组并发进程:读者与写者,共享一个文件,要求:1)允许多个读者同时执行读操作;2)任一写者在完成写操作之前不允许其他读者和写者工作;3)写者欲工作,要等待已存在的读者完成读操作,新的读者与写者均被拒绝 汉森管程实现读者写者问题(2) type read_writer = MONITOR var rc, wc : integer; R, W : condition; define start_read, end_read, start_write, end_write; use wait, signal, check, release; 汉森管程实现读者写者问题(3) ?procedure start-read; begin check(IM); if wc0 then wait(R,IM); rc := rc + 1; signal(R, IM); release(IM); end; procedure end-read; begin check(IM); rc := rc - 1; if rc=0 then signal(W,IM); release(IM); end; 汉森管程实现读者写者问题(4) ?procedure start_write; begin check(IM); wc := wc + 1; if rc0 or wc1 then wait(W,IM); release(IM); end; procedure end_write; begin check(IM); wc := wc - 1; if wc0 then signal(W,IM); else signal(R, IM); release(IM); end; 汉森管程实现读者写者问题(5) 初始化语句 begin rc := 0; wc := 0; R := 0; W := 0; end; 汉森管程实现读者写者问题(6) cobegin process reader begin …… call read-writer.start-read; read; …… call read-writer.end-read; end; process writer begin …… call read-writer.start-write; write; …… call rear-writer.end-write; end; coend; 汉森管程实现苹果橘子问题(1) 桌上有一只盘子,每次只能放入一只水果,爸爸专向盘中放苹果,妈妈专向盘中放橘子,一个儿子专吃盘中橘子,一个女儿专吃盘中苹果 汉森管程实现苹果橘子问题(2) TYPE FMSD = MONITOR var plate : (apple, orange); full : boolean; SP, SS, SD : condition; define put, get; use wait, signal, check, release; 汉森管程实现苹果橘子问题(3) procedure put(var fruit:(apple, orange)); begin check(IM); if full then wait(SP,IM); full := true; plate := fruit; if fruit=orange then signal(SS,IM); else signal(SD,IM); release(IM); end; 汉森管程实现苹果橘子问题(4) procedure get(varfruit:(apple,orange),x:plate); begin check(IM); if not full or platefruit then begi

文档评论(0)

1亿VIP精品文档

相关文档