正在加载图片...
汉| YPE FMSD=MoR var plate :(apple, orange) 森 full. boo lean: SP, SS, SD: semaphore define put, get use wait, signal, check, release procedure put(var procedure get(var fruit fruit: (apple, orange)) (apple, orange),x: plate) begin b egIn 现 check(IM) check (IM) f full then wait(SP, IM); if not ful l or plate<>fruit full : true: then begin plate fruit: f fruit orange 苹果橘子问题 if fruit=orange then wait(ss, IM then signal (SS, I M) else wait (SD, IM) else signal(SD, IM) end release x: plate end full: false signal(SP, I M) release(IM) end begin full: E false; SP: = 0: SS: =0; SD: = 0; end;汉森方法实现苹果橘子问题 TYPE FMSD = MONITOR var plate : (apple, orange); full : boolean; SP, SS, SD : semaphore; define put, get; use wait, signal, check, release; 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; procedure get(var fruit: (apple,orange),x:plate); begin check(IM); if not full or plate<>fruit then begin if fruit = orange then wait(SS,IM); else wait(SD,IM); end; x := plate; full := false; signal(SP, IM); release(IM); end; begin full := false; SP := 0; SS := 0; SD := 0; end;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有