²Ù×÷ϵͳ½Ì²Ä´ð°¸³ÂÏòȺÑîܽÇå ÏÂÔØ±¾ÎÄ

Ïò Buffer[i]дÈëÐÅÏ¢ ´Ó Buffer[k]ÖжÁÐÅÏ¢ V(mutex) V(mutex) V(full) V(empty)

j:=(j+1)mod n k:=(k+1)mod n

4)empty ±íʾ»¹ÓжàÉÙ»º³åÇøµ¥ÔªÎª¿Õ£¬Èç¹û empty=0,±íʾ»º³åÇøÂú£¬ÏµÍ³µ÷ÓÃд½ø³Ìʱ £¬Ð´½ø³Ì´¦Óڵȴý̬

full ±íʾ»º³åÇø¶¼¶àÉÙÓÐÐÅÐĵĵ¥Ôª£¬Èç¹û full=0, ±íʾ»º³åÇø¿Õ£¬ÏµÍ³µ÷ÓÃд½ø³Ìʱ £¬¶Á½ø³Ì´¦Óڵȴý̬

mutex ±íʾ¶ÔÓÚ»º³åÇøµ¥ÔªµÄ»¥³âÐźÅÁ¿,µ± mutex=1 ʱ£¬¿ªËø£¬mutex=0 ʱ£¬±ÕËø ¶þ£®µ±»º³åÇø´óСΪÎÞÇî´óʱ 1£©Í¬ÉÏ

2£© 1£®¿ÕµÄÐźÅÁ¿ empty ²»ÓÃÉè, ÂúµÄÐźÅÁ¿Îª full ³õֵΪ 0, ¶Ô»º³åÇøµ¥ÔªµÄ»¥³âÐźÅÁ¿ Ϊ mutex,j,k Ϊ»º³åÇøµ¥Î»µØÖ·£¬³õֵΪ 0 д½ø³Ì ¶Á½ø³Ì P(full)

P(mutex) P(mutex)

Ïò Buffer[i]дÈëÐÅÏ¢ ´Ó Buffer[k]ÖжÁÐÅÏ¢ V(mutex) V(mutex) V(full)

j:=(j+1)mod n k:=(k+1)mod n

4)full ±íʾ»º³åÇø¶¼¶àÉÙÓÐÐÅÐĵĵ¥Ôª£¬Èç¹û full=0, ±íʾ»º³åÇø¿Õ£¬ÏµÍ³µ÷ÓÃд½ø³Ì ʱ£¬¶Á½ø³Ì´¦Óڵȴý̬

mutex ±íʾ¶ÔÓÚ»º³åÇøµ¥ÔªµÄ»¥³âÐźÅÁ¿,µ± mutex=1 ʱ£¬¿ªËø£¬mutex=0 ʱ£¬±ÕËø

13.¼Ù¶¨Ò»¸öÔÄÀÀÊÒ×î¶à¿ÉÒÔÈÝÄÉ 100 ÈË£¬¶ÁÕß½øÈëºÍÀ뿪ÔÄÀÀÊÒ¶¼±ØÐëÔÚÔÄÀÀÊÒÃſڵÄÒ» ¸öµÇ¼Ç±íÉϱêÖ¾£¨½øÈëʱµÇ¼Ç£¬À뿪ʱȥµôµÇ¼ÇÏ¶øÇÒÿ´ÎÖ»ÔÊÐíÒ»È˵ǼǻòÕßÈ¥µôµÇ¼Ç£¬ÎÊ£º

1) Ó¦±àд¼¸¸ö½ø³ÌÍê³ÉÕâÏ×÷£¬³ÌÐòµÄÖ÷Òª¶¯×÷ÊÇЩʲô£¿Ó¦¸ÃÉèÖü¸¸ö½ø³Ì£¿½ø³Ì ºÍ³ÌÐò¼äµÄ¹ØÏµÈçºÎ£¿

2) Óà P,V ²Ù×÷д³öÕâЩ½ø³ÌµÄͬ²½Í¨ÐŹØÏµ

´ð£º±àдÁ½¸ö½ø³Ì£¬Ò»¸ö´¦Àí¶ÁÕß½øÈ룬һ¸ö´¦Àí¶ÁÕßÀ뿪£¬½ø³ÌÊdzÌÐòµÄ¶¯Ì¬Ö´ÐÐ ÉèÖÃÐźÅÁ¿ full Ϊ³õֵΪ 0£¬ ¿ÕµÄÐźÅÁ¿ empty ³õֵΪ 100, »¥³âÐźÅÁ¿ mutex ³õÖµ Ϊ 1

½øÈë À뿪

P(empty) P(full) P(mutex) P(mutex) µÇ¼Ç È¡ÏûµÇ¼Ç V(mutex) V(mutex) V(full) V(empty) ½øÈë À뿪

14£®ÔÚÉú²úÕߺÍÏû·ÑÕßÎÊÌâÖУ¬Èç¹û¶Ôµ÷Éú²úÕߣ¨»òÏû·ÑÕߣ©½ø³ÌÖеÄÁ½¸ö P ²Ù×÷ºÍÁ½¸ö V ²Ù×÷µÄ´ÎÐò£¬»á·¢ÉúʲôÇé¿ö£¿Çë˵Ã÷£¡

´ð£º¶Ôµ÷ P ²Ù×÷, »á·¢ÉúËÀËø ÒòΪ P(empty)ÔÚ p(mutex)ºÍ v(mutex)ÄÚ²¿£¬Ò²¾ÍÊÇÁÙ½ç ÇøÖУ¬µ± empty¡Ü0,ʱ£¬P(empty)ÔÚÁÙ½çÇøÖнøÈëµ½ÁËÐÝÃß״̬¡£ÄÇô¾Í±ðµÄ½ø³Ì¶¼½øÈë ²»µ½ÁÙ½çÇøÖУ¬½øÈëËÀËø×´Ì¬¡£

¶øÁ½¸ö V ²Ù×÷Î޹ؽôÒª

15.ΪʲôÒýÈë¸ß¼¶Í¨ÐÅ»ú¹¹£¿ËûÓÐʲôÓŵ㣿˵Ã÷ÏûÏ¢»º³åͨÐÅ»ú¹¹µÄ»ù±¾¹¤×÷¹ý³Ì£¿ ´ð£º

1£©ÎªÁ˽â¾ö´óÁ¿µÄÏûÏ¢½»»»£¬

2£©Óŵ㣺²»½öÄܹ»±£Ö¤Ïà»¥ÖÆÔ¼µÄ½ø³ÌÖ®¼äµÄÏ໥¹ØÏµ£¬»¹Í¬Ê±ÊµÏÖÁ˽ø³ÌÖ®¼äµÄÐÅÏ¢ ½»»»

3£©ÏûÏ¢»º³åͨÐż¼ÊõµÄ¹¤×÷¹ý³Ì£º

Æä»ù±¾Ë¼ÏëÊÇ£º¸ù¾Ý¡°Éú²úÕß-Ïû·ÑÕß¡±Ô­Àí£¬ÀûÓÃÄÚ´æÖй«ÓÃÏûÏ¢»º³åÇøÊµÏÖ½ø³ÌÖ®¼ä µÄÐÅÏ¢½»»»¡£

ÄÚ´æÖпª±ÙÁËÈô¸ÉÏûÏ¢»º´æÇø£¬ÓÃÒÔ´æ·ÅÏûÏ¢£¬Ã¿µ±Ò»¸ö½ø³Ì£¨·¢Ëͽø³Ì£©ÏòÁíÒ»¸ö½ø³Ì £¨½ÓÊÕ½ø³Ì£©·¢ËÍÏûϢʱ£¬±ãÉêÇëÒ»¸öÏûÏ¢»º³åÇø£¬²¢°ÑÒÑ×¼±¸ºÃµÄÏûÏ¢·¢Ë͵½»º³åÇøÖÐ £¬È»ºó°Ñ¸ÃÏûÏ¢»º³åÇø²åÈëµ½½ÓÊܽø³ÌµÄÏûÏ¢¶ÓÁÐÖУ¬×îºó֪ͨ½ÓÊܽø³Ì£¬½ÓÊÕ½ø³ÌÊÕµ½ ·¢Ëͽø³Ì·¢Ë͵½µÄ֪ͨºó£¬´Ó±¾½ø³ÌµÄÏûÏ¢¶ÓÁÐÖÐÕªÏÂÒ»ÏûÏ¢»º³åÇø£¬È¡³öËùÐèµÄÏûÏ¢£¬ È»ºó°ÑÏûÏ¢»º³åÇø»¹¸øÏµÍ³¡£

16.½ø³Ì¼äΪʲôҪ½øÐÐͨÐÅ£¿ÔÚ±àд×Ô¼ºµÄ³ÌÐòʱ£¬ÊÇ·ñ¿¼Âǵ½ÒªºÍ±ðµÄÓû§³ÌÐò½øÐРͨÐÅ£¿¸÷¸öÓû§½ø³Ì¼äÊÇ·ñ´æÔÚÖÆÔ¼¹ØÏµ?

´ð£»1)¸÷¸ö½ø³ÌÔÚÔËÐеÄʱºò£¬¹²ÏíÄڴ棬»òÕß¹²Í¬Íê³ÉÒ»¸öÌØ¶¨µÄ¹¦ÄÜ£¬¶¼ÐèÒª½øÐÐͨ ÐÅ£¬

2)ÐèÒª£¬

3£©´ÙÔÚͬ²½ºÍ»¥³âµÄ¹ØÏµ£¬±ÈÈçÁÄÌì³ÌÐò

17.¼Ù¶¨Ò»¸öϵͳµÄ´ÅÅÌ¿é´óСΪ 2KB£¬Ò»¸ö¿éµÄƽ¾ù·ÃÎÊʱ¼äÊÇ 20 ºÁÃë¡£Ò»¸öÓÐ 40KB ½ø³Ì

ÓÉÓÚ×ÊÔ´ÇëÇó´ÓÔËÐÐ̬±äΪ×èÈû̬£¬Ëü±ØÐë±£³Ö×èÈû¶à³¤Ê±¼ä£¿ ´ð£º 40/2 * 20=400 ºÁÃë ±£³Ö×èÈû̬ 400 ºÁÃë

18.¼ÙÉè A,B Á½¸ö»ð³µÕ¾Ö®¼äÊǵ¥¹ìÏߣ¬Ðí¶àÁгµÍ¬Ê±µ½´ï A Õ¾£¬È»ºó¾­¹ý A Õ¾µ½´ï B Õ¾£»ÓÖ Áгµ´Ó A µ½ B µÄÐÐʻʱ¼äÊÇ t,ÁгµÔÚ B Õ½ºóµÄÍ£Áôʱ¼äÊÇ t/2,ÊÔÎÊÔÚ¸ÃÎÊÌâÄ£ÐÍÖУ¬Ê²Ã´ÊÇ ÁÙ½ç×ÊÔ´£¬Ê²Ã´ÊÇÁÙ½çÇø?

´ð£ºÁÙ½ç×ÊÔ´£º A µ½ B Ö®¼äµÄµ¥¹ìÏߣ¬ÒÔ¼° B Õ¾ÊÇÁÙ½ç×ÊÔ´ ÁÙ½çÇø£º ÔÚ A µ½ B Ö®¼äÐÐÊ»£¬ÒÔ¼°ÔÚ B ÉÏÍ£ÁôÊÇÁÙ½çÇø 19.ͬ²½»úÖÆÓ¦¸Ã×ñÑ­ÄÄЩԭÔò£¿ÎªÊ²Ã´£¿

´ð£º1.ËüµÄÃèÊöÄÜÁ¦Ó¦¸Ã×㹻ǿ£¬¼ÈÄܽâ¾ö¸÷ÖÖ½ø³Ì¼äµÄͬ²½»¥³âÎÊÌ⣻ 2£®Æä´Î£¬Ó¦¸ÃÈÝÒ×ʵÏÖ²¢Ð§ÂÊ¸ß 3£®µÚÈý£¬Ê¹Ó÷½±ã

20.ÎÒÃÇΪijÁÙ½ç×ÊÔ´ÉèÖÃÒ»°ÑËø W¡£µ± W=1 ʱ£¬±íʾ¹ØËø£¬W=0 ʱ£¬±íʾ¿ªËø£¬ÊÔд³ö¿ªËø

ºÍ¹ØËøÔ­Ó²¢ÀûÓÃËüȥʵÏÖ»¥³â¡£ ´ð£º while(1==w); enter ÁÙ½çÇø

21.½ø³Ì A1,A2,?,An ͨ¹ý m ¸ö»º³åÇøÏò½ø³Ì B1,B2,?,Bn ²»¶Ï·¢ËÍÏûÏ¢£¬·¢ËͺͽÓÊÕ¹¤×÷×ñ

Ñ­ÈçϹæÔò£º

1)ÿ¸ö·¢Ëͽø³Ìÿ´Î·¢ËÍÒ»¸öÏûÏ¢£¬Ð´ÈëÒ»¸ö»º³åÇø£¬»º³åÇø´óСÓëÏûÏ¢³¤¶ÈÒ»Ñù 2)¶Ôÿһ¸öÏûÏ¢£¬B1,B2,..Bn ¶¼ÐèÒª¸÷½ÓÊÕÒ»´Î£¬¶Áµ½¸÷×ÔµÄÊý¾ÝÇøÖУ»

3)m ¸ö»º³åÇø¶¼Âúʱ£¬·¢Ëͽø³ÌµÈ´ý£¬Ã»ÓпɶÁÏûϢʱ£¬½ÓÊܽø³ÌµÈ´ý ÊÔÓà P,V ²Ù×÷×éÖ¯ÕýÈ·µÄ·¢ËͺͽÓÊÕ²Ù×÷¡£ ´ð£º VAR

mutex£º Semaphore£º{³õֵΪ 1£¬ÊµÏÖ¶Ô»º³åÇøµÄ»¥³â} empty£º Semaphore£º{³õֵΪ n,ÓжàÉÙ»º³å}

Full£º Array[1..n] OF Semaphore£º{³õֵΪ 0,ÿ¸ö½ÓÊÕ½ø³Ìµ±Ç°¿É½ÓÊյĻº³åÇø }

Count£ºArray[1..n] OF INTEGER;{³õֵΪ 0,n ¸ö»º³åÇø±»·ÃÎʵĴÎÊý}

ReceivePointer:Array[1?n] OF INTEGER{³õֵΪ 0£¬¸Ã½ÓÊÕ½ø³ÌҪȡÄĸö } SendPointer£ºINTEGER;{³õֵΪ 0,·¢Ëͽø³ÌÏ´ÎÒª·Åµ½Äĸö»º³åÇø} ·¢Ëͽø³Ì (num£ºINTEGER) {num Ϊ½ø³ÌºÅ} Repeat P(empty) P(mutex)

Ïò buff[sendPointer]·ÅÏûÏ¢

sendPointer£º=£¨sendPointer+1£©mod k count[sendPointer]£º=0 V(mutex)

For i:=1 To n Do V(Full[i]) Until FALSE

½ÓÊÕ½ø³Ì £¨num:INTEGER£©:{num Ϊ½ÓÊÕ½ø³ÌºÅ} Repeat

P(Full[num]) P(mutex)

´Ó buff[ReceivePoiner[num]]ÖÐÈ¡ÏûÏ¢ V(mutex)

Count[ReceivePoiner[num]]£º= Count[ReceivePoiner[num]]+1 IF(Count[ReceivePoiner[num]]==n) THEN V(empty)

Count[ReceivePoiner[num]]==0

ReceivePoiner[num]]£º=(ReceivePoiner[num])+1)mod n Until FALSE

22£®ÓÐ K ¸ö½ø³Ì¹²ÏíÒ»¸öÁÙ½çÇø£¬¶ÔÓÚÏÂÊöÇé¿ö£¬Çë˵Ã÷ÐźÅÁ¿ÖµµÄ³õÖµ£¬º¬Ò壬²¢Óà P, V

²Ù×÷д³öÏà¹ØµÄ»¥³âËã·¨¡£

1£© Ò»´ÎÖ»ÔÊÐíÒ»¸ö½ø³Ì½øÈëÁÙ½çÇø 2£© Ò»´ÎÖ»ÔÊÐí m ¸ö½ø³Ì½øÈëÁÙ½çÇø ´ð£º1)ÉèÖû¥³âÐźÅÁ¿ mutex£¬³õֵΪ 1 P(mutex) Enter_region V(mutex)

2)ÉèÖÃͬ²½ÐźÅÁ¿ mutex,³õֵΪ m;

P(mutex) Enter_region V(mutex)

23£®°®Ë¯¾õµÄÀí·¢Ê¦ÎÊÌ⣬һ¸öÀí·¢µêÓÐÁ½¼äÏàÁ¬µÄÎÝ×Ó£¬Ò»¼äÊÇ˽ÊÒ£¬ÀïÃæÓÐÒ»°ÑÀí·¢ ÒΣ¬ÁíÒ»¸öÊǵȺòÊÒ£¬ÓÐÒ»¸ö»¬¶¯ÃÅºÍ N °ÑÒÎ×Ó¡£Àí·¢Ê¦Ã¦µÄʱºò£¬Í¨Ïò˽ÊÒµÄÃű»¹Ø±Õ £¬ÐÂÀ´µÄ¹Ë¿ÍÕÒÒ»°Ñ¿ÕÒÎ×Ó×øÏ£¬Èç¹ûÒÎ×Ó¶¼±»Õ¼ÓÃÁË£¬Ôò¹Ë¿ÍÖ»ºÃÀëÈ¥£¬Èç¹ûûÓÐ¹Ë¿Í £¬ÔòÀí·¢Ê¦ÔÚÀí·¢ÒÎÉÏ˯¾õ¡£²¢´ò¿ªÍ¨Ïò˽ÊÒµÄÃÅ¡£Àí·¢Ê¦Ë¯¾õʱ£¬¹Ë¿Í¿ÉÒÔ½ÐÐÑËûÀí·¢ £¬Çë±àд

Àí·¢Ê¦ºÍ¹Ë¿ÍµÄ³ÌÐò£¬ÕýȷʵÏÖͬ²½ºÍ»¥³âÎÊÌ⣡ ´ð£º

½â£ºVAR:

S1,S2 £ºSemaphore;{³õֵΪ 0,ʵÏÖÀí·¢Ê¦Óë¹Ë¿ÍµÄͬ²½} Mutex£ºSemaphore£º{³õֵΪ 1,ʵÏÖ¶Ô waiting µÄ»¥³â} waiting£ºINTEGER:{³õֵΪ 0,µÈ´ýµÄ¹Ë¿ÍÊý} Àí·¢Ê¦½ø³Ì REPEAT

P(S1) {ÈôÎ޹˿ͣ¬Ôò˯¾õ } P(mutex)

Waiting:=waiting-1

V(S2); (»½ÐÑÒ»¸öµÈ´ýµÄ¿Í»§) V(mutex) Àí·¢

Until FALSE ¹Ë¿Í½ø³Ì P(mutex)

IF(waiting

Waiting£º=-waiting+1 ;(µÈ´ý¹Ë¿ÍÊý¼Ó 1) V(mutex);

V(S1) {֪ͨÀí·¢Ê¦}

P(S2) {ÈôÎÞÀí·¢Ê¦£¬¹ÒÆð} ×øÏÂÀí·¢ END

ELSE V(mutex)

24.½ø³ÌÖ®¼äµÄͨÐÅ·½Ê½Óм¸ÖÖ£¿ÔÚµ¥»ú»·¾³Ï£¬³£ÓõÄÄļ¸ÖÖͨÐÅ·½Ê½£¿ ´ð£ºÈýÖÖ£º¹²ÏíÄڴ棬ÏûÏ¢»úÖÆ£¬ÒÔ¼°¹ÜµÀͨÐÅ ÔÚµ¥»ú»·¾³Ï£º³£²ÉÓà ¹²ÏíÄÚ´æÒÔ¼°¹ÜµÀͨÐÅ¡£

25. Ò»¸ö¿ì²ÍµêÓÐËÄÀà¹ÍÔ±£º1£©Áì°à£¬ËûÃǽÓÊܹ˿͵ãµÄ²Ëµ¥£»2)³øÊ¦£¬×¼±¸·¹²Ë£»3£© ´ò°ü¹¤£¬½«·¹²Ë×°ÔÚ´ü×ÓÀ4£©ÊÕÒøÔª£¬½«Ê³Æ·´ü½»¸ø¹Ë¿Í²¢ÊÕÇ®£¬Ã¿¸ö¹ÍÔ±¶¼¿ÉÒÔ¿´ ×÷Ò»¸ö½øÐÐͨÐŵÄ˳Ðò½ø³Ì£¬ËûÃDzÉÓõĽø³Ì¼äͨÐÅ·½Ê½ÊÇʲô£¿ ´ð£ºÍ¨ÐÅ·½Ê½ÎªÏûÏ¢´«µÝ¡£

26£®ÇÀռʽ½ø³Ìµ÷¶ÈÊÇָϵͳÄܹ»Ç¿ÖÆÐÔµÄʹִÐнø³Ì·ÅÆú´¦Àí»ú£¬ÊÔÎÊ·Öʱϵͳ²ÉÓÃµÄ ÊÇÇÀռʽ»¹ÊÇ·ÇÇÀռʽ½ø³Ìµ÷¶È£¿ÊµÊ±ÏµÍ³£¿ ´ð£º·Öʱϵͳ²ÉÓõÄÊÇ·ÇÇÀռʽ½ø³Ìµ÷¶È