µ±Ç°Î»ÖãºÊ×Ò³ > ²Ù×÷ϵͳ½Ì³ÌµÚ5°æ²¿·ÖϰÌâ±ê×¼´ð°¸
£¨1£© ¹«ÓÃÐźÅÁ¿£» £¨2£© ˽ÓÐÐźÅÁ¿¡£ °´È¡Öµ·Ö
£¨1£© ¶þÖµÐźÅÁ¿£» £¨2£© Ò»°ãÐźÅÁ¿¡£
15.ºÎν¹Ü³Ì£¿ËüÓÐÄÄЩÊôÐÔ£¿
¹Ü³ÌÊÇÓɾֲ¿ÓÚ×Ô¼ºµÄÈô¸É¹«¹²±äÁ¿¼°ÆäÉùÃ÷ºÍËùÓзÃÎÊÕâЩ¹«¹²±äÁ¿µÄ¹ý³ÌËù×é³ÉµÄÈí¼þÄ£¿é£¬ËüÌṩһÖÖ»¥³â»úÖÆ£¬½ø³Ì¿ÉÒÔ»¥³âµØµ÷Óù̵ܳĹý³Ì¡£
£¨1£© ¹²ÏíÐÔ£» £¨2£© °²È«ÐÔ£» £¨3£© »¥³âÐÔ¡£
25.ÊÔÊö²úÉúËÀËøµÄ±ØÒªÌõ¼þ¡¢ËÀËø²úÉúµÄÔÒò¼°Ô¤·ÀËÀËøµÄ·½·¨¡£ (1) (2) (3) (4)
»¥³âÌõ¼þ£»
Õ¼Óк͵ȴýÌõ¼þ£» ²»°þ¶áÌõ¼þ£» Ñ»·µÈ´ýÌõ¼þ¡£
½ø³ÌÍÆ½øË³Ðò²»µ±¡¢PV²Ù×÷ʹÓò»Íס¢Í¬Àà×ÊÔ´·ÖÅä²»¾ù»ò¶ÔijЩ×ÊÔ´µÄʹÓÃδ¼ÓÏÞÖÆµÈ£¬²»½öÓëϵͳӵÓеÄ×ÊÔ´ÊýÁ¿Óйأ¬¶øÇÒÓë×ÊÔ´·ÖÅä²ßÂÔ¡¢½ø³Ì¶Ô×ÊÔ´µÄʹÓÃÒªÇóÒÔ¼°²¢·¢½ø³ÌµÄÍÆ½øË³ÐòÓйء£
£¨1£© ÆÆ»µÌõ¼þ1£¨»¥³âÌõ¼þ£©£»
£¨2£© ÆÆ»µÌõ¼þ2£¨Õ¼Óк͵ȴýÌõ¼þ£©£» £¨3£© ÆÆ»µÌõ¼þ3£¨²»°þ¶áÌõ¼þ£©£» £¨4£© ÆÆ»µÌõ¼þ4£¨Ñ»·µÈ´ýÌõ¼þ£©¡£
¶þ¡¢ 2¡¢
´ð£º²»Í¬
£¨1£©:³õֵΪ1£¬·¶Î§Îª[-n+1,1]£»£¨2£©£º³õֵΪm£¬·¶Î§Îª[-n+m,m]¡£ 5¡¢´ð£º1)ʹÓÃÐźÅÁ¿ºÍP¡¢V²Ù×÷£º
var name: array[1..100] of A¡£
A=record number:integer¡£ name:string¡£ end
for i:=1 to 100 do {A[i].number:=i¡£ A[i].name:=null¡£}
9 / 19
mutex,seatcount:semaphore¡£ i:integer¡£mutex:=1¡£seatcount:=100¡£ cobegin {
process readeri(varreadername:string)(i=1,2,¡) {
P(seatcount)¡£ P(mutex)¡£
for i:=1 to 100 do i++
if A[i].name=null then A[i].name:=readername¡£
reader get the seat number =i¡£ /*A[i].number V(mutex)
½øÈëÔÄÀÀÊÒ£¬×ùλºÅi£¬×ù϶ÁÊé¡£
P(mutex)¡£
A[i] name:=null¡£ V(mutex)¡£ V(seatcount)¡£ À뿪ÔÄÀÀÊÒ¡£ } } coend.
2) ʹÓù̲ܳÙ×÷£º
TYPE readbook=monitor
VAR R:condition¡£ Interface Module IM¡£ i,seatcount:integer¡£
name:array[1..100] of string¡£ DEFINE readercome,readerleave¡£ USE check,wait,signal,release¡£
procedure readercome(readername) begin
check(IM)¡£
if seatcount¡Ý100 wait(R,IM) seatcount:=seatcount+1¡£ for i=1 to 100 do i++
if name[i]==null then name[i]:=readername¡£ get the seat number=i¡£ release(IM)¡£ end
procedure readerleave(readername) begin
10 / 19
check(IM)¡£ seatcount--¡£
for i=1 to 100 do i++
if name[i]==readername then name[i]:=null¡£ release(IM)¡£ end
begin
seatcount:=100¡£name:=null¡£ end
cobegin
process readeri(i=1,2.¡) begin
readercome(readername)¡£ read the book¡£
readerleave(readername)¡£ leave the readroom¡£ end coend.
6¡¢´ð£ºÊµÖÊÉÏÊÇÁ½¸ö½ø³ÌµÄͬ²½ÎÊÌ⣬ÉèÐźÅÁ¿S1ºÍS2·Ö±ð±íʾ¿É¼ð°××ӺͺÚ×Ó£¬²»Ê§Ò»°ãÐÔ£¬ÈôÁîÏȼð°××Ó¡£
var S1,S2:semaphore¡£
S1:=1¡£S2:=0¡£ cobegin {
process P1 begin repeat P(S1)¡£
¼ð°××Ó
V(S2)¡£ until false¡£ end
process P2 begin repeat P(S2)¡£
¼ðºÚ×Ó
V(S1)¡£ until false¡£
end }
11 / 19
coend.
16¡¢´ð£º(1)ÓÃÐźÅÁ¿ºÍP¡¢V²Ù×÷¡£ var S,S1,S2,S3¡£semaphore¡£ S:=1¡£S1:=S2:=S3:=0¡£ flag1,flag2,flag3:Boolean¡£ flag1:=flag2:=flag3:=true¡£ cobegin {
process ¹©Ó¦Õß
begin
repeat
P(S)¡£
È¡Á½ÑùÏãÑÌÔÁÏ·Å×ÀÉÏ£¬ÓÉflagi±ê¼Ç¡£ /*flage1¡¢flage2¡¢flage3´ú±íÑ̲ݡ¢Ö½¡¢»ð²ñ if flag2&flag3 then V(S1)¡£ /*¹©Ö½ºÍ»ð²ñ else if flag1&flag3 then V(S2)¡£ /*¹©Ñ̲ݺͻð²ñ else V(S3)¡£ /*¹©Ñ̲ݺÍÖ½ untile false¡£ end
process ÎüÑÌÕß1
begin
repeat P(S1)¡£ È¡ÔÁÏ¡£ ×öÏãÑÌ¡£ V(S)¡£ ÎüÏãÑÌ¡£ untile false¡£ process ÎüÑÌÕß2
begin
repeat P(S2)¡£ È¡ÔÁÏ¡£ ×öÏãÑÌ¡£ V(S)¡£ ÎüÏãÑÌ¡£ untile false¡£ process ÎüÑÌÕß3
begin
repeat P(S3)¡£ È¡ÔÁÏ¡£ ×öÏãÑÌ¡£ V(S)¡£
12 / 19
¹²·ÖÏí92ƪÏà¹ØÎĵµ