Repeat ´òÓ¡NµÄÖµ£» N=0£» Until false;
ÆäÖÐNΪÕûÊý£¬³õֵΪ4¡£Èô½ø³ÌAÏÈÖ´ÐÐÁËÈý¸öÑ»·ºó£¬½ø³ÌAºÍ½ø³ÌBÓÖ²¢·¢Ö´ÐÐÁËÒ»¸öÑ»·£¬Ð´³ö¿ÉÄܳöÏֵĴòÓ¡Öµ¡£ÕýÈ·µÄ´òÓ¡ÖµÓ¦¸ÃÊǶàÉÙ£¿ÇëÓÃP¡¢V²Ù×÷½øÐйÜÀí£¬Ê¹½ø³ÌAºÍB²¢·¢Ö´ÐÐʱ²»»á³öÏÖÓëʱ¼äÓйصĴíÎó¡£ ´ð£º
ÒòΪN³õֵΪ4£¬Èô½ø³ÌAÏÈÖ´ÐÐÁËÈý¸öÑ»·£¬´ËʱNµÄֵΪ19¡£µ±½ø³ÌAºÍ½ø³ÌB²¢·¢Ö´ÐÐʱ¿ÉÄÜ»áÓÐÈçÏÂÁ½ÖÖÖ´ÐдÎÐò£¬¼´½ø³ÌAÏÈÖ´ÐÐÒ»´ÎÑ»·£¬È»ºóÔÙ½ø³ÌBÖ´ÐÐÒ»´ÎÑ»·£¬´Ëʱ´òÓ¡µÄÊÇÕýÈ·Öµ24£¬Ö´ÐкóNÖеÄֵΪ0¡£µ«Èô½ø³ÌBÏÈÖ´ÐÐÒ»´ÎÑ»·£¬È»ºóÔÙ½ø³ÌAÖ´ÐÐÒ»´ÎÑ»·£¬Ôò´òÓ¡µÄÖµÊÇ19£¬Ö´ÐкóNÖеÄÖµÊÇ5¡£ÕâÊÇ´íÎóµÄ£¬¼´·¢ÉúÁËÓëʱ¼äÓйصĴíÎó¡£ÓÃP¡¢V²Ù×÷½øÐйÜÀí£¬Ê¹½ø³ÌAºÍB²¢·¢Ê±²»»á³öÏÖÓëʱ¼äÓйصĴíÎóµÄ³ÌÐòÈçÏ£º£¨SΪ»¥³âÐźÅÁ¿£¬³õֵΪ1£©£¬
½ø³ÌA Repeat P(S); N=N+5; V(S); Until false; ½ø³ÌB Repeat P(S);
´òÓ¡NµÄÖµ£» N=0£» V(S); Until false;
£±£²¡¢Ëĸö½ø³ÌP0£¬P1,P2,P3ºÍËĸöÐÅÏäM0,M1,M2,M3½ø³Ì¼ä½èÖúÏàÁÚµÄÐÅÏä´«µÝÏûÏ¢£º ÿ´Î´Ó ÖÐÈ¡³öÒ»ÌõÏûÏ¢£¬¾¼Ó¹¤ËÍÈë ÖС£ÆäÖÐM0,M1,M2,M3·Ö±ðÉèÓÐ3,3,2,2¸ö¸ñ×Ó£¬
13
ÿ¸ö¸ñ×Ó·ÅÒ»ÌõÏûÏ¢£¬³õʼʱ£¬M0×°ÂúÁËÈýÌõÏûÏ¢£¬ÆäÓàΪ¿Õ¡£Ð´³öʹÓÃÐźÅÁ¿ÊµÏÖ½ø³Ì £¨i=0,1,2,3£©Í¬²½¼°»¥³âµÄÁ÷³Ì¡£ ´ð£º
mutex0 ~ mutex3 : ·Ö±ðÓÃÓÚ¿ØÖÆ»¥³â·ÃÎÊM0 ~ M 3£¬³õֵΪ1¡£
full0 ~ full3 : ·Ö±ðÓÃÓÚ¿ØÖÆÍ¬²½·ÃÎÊM0 ~ M3 ,ÆäÖÐfull0 ³õֵΪ3£¬full1 ~ full3 ³õֵΪ0£¬±íʾÐÅÏäÖÐÏûÏ¢ÌõÊý¡£
empty0 ~ empty3 : ·Ö±ðÓÃÓÚͬ²½¿ØÖƶÔM0 ~ M3µÄ·ÃÎÊ¡£Empty0³õֵΪ0£¬empty2~ empty3³õֵΪ2£¬empty1³õֵΪ3£¬·Ö±ðÓÃÓÚ±íʾÐÅÏäÖпոñ×Ó¸öÊý¡£
ÁíÓÃsend ( Mi , message )±íʾ½«ÏûÏ¢Ë͵½£¨Mi mod 4£©ºÅÐÅÏäÖУ»¶øÓÃreceive ( Mi£¬message )±íʾ½ÓÊÕÒÑ´æÔÚÓÚ( Mi mod 4 )ÖеÄÏûÏ¢¡£
ÔòʹÓÃÐźÅÁ¿ÊµÏÖ½ø³ÌPi (i = 0 , 1 ,2 ,3 )ͬ²½¼°»¥³âµÄÁ÷³ÌÈçÏ£º mutex0 , m utex 1, m utex2 , m utex3 : semaphore ; full0 , ful l1 , ful l2 , ful l3 : semaphore ;
empty0 , em pty1 , em pty2 , em pty3 : semaphore ; begin
mutex0 : = 1 ; mutex1 : = 1 ; mutex2 : = 1 ; mutex : = 1 ; full0 : = 3 ; full1 : = 0 ; full2 : = 0 ; full3 : = 0 ;
empty0 : = 0 ; empty1 : = 3 ; empty2 : = 2 ; empty3 : = 2 ; Parbegin P0£ºbegin repeat P ( mutex0 ) ; P ( full0 ) ;
Receive ( M0,message); V (empty0 ) ;
Processing the message until finished; P ( mutex1 ) ; P ( empty1 ) ; Send ( M1,message ) ; V ( full1 ) ;
14
V ( mutex1 ) ;
Until false ; ¡ end ;
P1£º£û¿ÉÀàËÆÓÚP0ʵÏÖÖ®£ý; P2£º£û¿ÉÀàËÆÓÚP0ʵÏÖÖ®£ý; P3£º£û¿ÉÀàËÆÓÚP0ʵÏÖÖ®£ý; Parend ; End;
£±£³¡¢ÉèϵͳÖнöÓÐÒ»ÀàÊýÁ¿ÎªMµÄ¶ÀÕ¼ÐÍ×ÊÔ´£¬ÏµÍ³ÖÐN¸ö½ø³Ì¾ºÕù¸ÃÀà×ÊÔ´£¬ÆäÖи÷½ø³Ì¶Ô¸ÃÀà×ÊÔ´µÄ×î´óÐèÇóÁ¿ÎªW¡£µ±M¡¢N¡¢W·Ö±ðÈ¡ÏÂÁÐֵʱ£¬ÊÔÅжÏÄÄЩÇé¿ö»á·¢ÉúËÀËø£¿ÎªÊ²Ã´£¿
¢Ù M=2£¬N=2£¬W=1 ¢ÚM=3£¬N=2£¬W=2 ¢ÛM=3£¬N=2£¬W=3 ¢ÜM=5£¬N=3£¬W=2 ¢ÝM=6£¬N=3£¬W=3 ´ð£º
¢Û¿ÉÄܻᷢÉúËÀËø¡£Ö»ÒªÒ»¸ö½ø³ÌÕ¼ÓÃÁËÉÙÓÚ3¸ö¶ÀÕ¼ÐÍ×ÊÔ´¶øÁíÒ»¸ö½ø³ÌÕ¼ÓÃÁËÆäÓàµÄ¶ÀÕ¼ÐÍ×ÊÔ´£¬Á½¸ö½ø³Ì¶¼»áÏ໥´¦Óڵȴý¶Ô·½½ø³ÌÊÍ·Å×ÊÔ´µÄ״̬¡£
¢ÝÒ²¿ÉÄܻᷢÉúËÀËø¡£µ±Ã¿¸ö½ø³Ì¶¼·ÖÅäÁËÁ½¸ö×ÊԴʱ£¬3¸ö½ø³Ì¶¼»á±Ë´ËµÈ´ý¡£
£±£´¡¢¼Ù¶¨¾ßÓÐ5¸ö½ø³ÌµÄ½ø³Ì¼¯ºÏP£½£ûP0,P1,P2,P3,P4£ý,ϵͳÖÐÓÐÈýÀà×ÊÔ´A£¬BºÍC¡£ÆäÖÐAÀà×ÊÔ´ÓÐ10¸ö£¬BÀà×ÊÔ´ÓÐ5¸ö£¬CÀà×ÊÔ´ÓÐ7¸ö¡£¼Ù¶¨ÔÚijʱ¿ÌÓÐÈçÏÂ״̬£º Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3
ÊÔ¸ø³öNeed£¬²¢ËµÃ÷µ±Ç°ÏµÍ³ÊÇ·ñ´¦ÓÚ°²È«×´Ì¬£¬Èç¹ûÊÇ£¬¸ø³ö°²È«ÐòÁС£Èç¹û²»ÊÇ£¬ËµÃ÷ÀíÓÉ¡£
15
´ð£º
µ±Ç°ÏµÍ³´¦ÓÚ°²È«×´Ì¬£¬°²È«ÐòÁÐÈçÏÂÇó½â£º work = Available = (3 , 3 , 2 )
ѰÕÒ Needj <= work = ( 3 , 3 , 2 ) ( j = 0 , 1 , 2 , 3 , 4) j = 1 Need1 = (1 ,2 ,3 ) < = (3 , 3 , 2 ) work : = (3 , 3 , 2 ) + (2 ,0 ,0 ) = (5 , 3 , 2 )
ѰÕÒ Needj <= work = ( 5 , 3 , 2 ) ( j = 0 , 2 , 3 , 4) j = 3 Need3 = (0 ,1 ,1 ) < = (5 , 3 , 2 ) work : = (5 , 3 , 2 ) + (2 ,1 ,1 ) = (7 , 4 , 3 ) ѰÕÒ Needj <= work = (7 , 4 , 3 ) ( j = 0 , 2 , 4) j = 4 Need4 = (4 ,3 ,1 ) < = (7 , 4 , 3 ) work : = (7 , 4 , 3 ) + (0 ,0 ,2 ) = (7 , 4 , 5) ѰÕÒ Needj <= work = (7 , 4 , 5) (j = 0 , 2 ) j = 2 Need2 = (6 ,0 ,0 ) < = (7 , 4 , 5 ) work : = (7 , 4 , 5 ) + (3 ,0 ,2 ) = (10 , 4 , 7) ѰÕÒ Needj <= work = (10 , 4 , 7) ( j = 0 ) j = 0 work : = (10 , 4 , 7 ) + (0 ,1 ,0 ) = (10 , 5 , 7) ËùÒÔ°²È«ÐòÁÐΪ£¼P1£¬P3£¬P4£¬P2£¬P0£¾¡£
£±£µ¡¢ÓÐÒ»ÔÄÀÀÊÒ£¬¶ÁÕß½øÈëʱ±ØÐëÏÈÔÚÒ»ÕŵǼDZíÉϵǼǡ£¸Ã±íÖÐÿ¸ö±íÏî´ú±íÔÄÀÀÊÒÖеÄÒ»¸ö×ùλ¡£¶ÁÕßÀ뿪ʱҪÏûµôÆäµÇ¼ÇÐÅÏ¢¡£ÔÄÀÀÊÒ¹²ÓÐ50¸ö×ùλ¡£µÇ¼Ç±íÿ´Î½öÔÊÐíһλ¶ÁÕß½øÐеǼǻò×¢Ïú¡£¶ÁÕߵǼÇʱ£¬·¢ÏֵǼDZíÂú£¬ËûÔÚÔÄÀÀÊÒÍâµÈ´ý£¬Ö±ÖÁÓпÕλÔٵǼǽøÈë¡£ÊÔÓÃÀàPascalÓïÑÔºÍP¡¢V²Ù×÷£¬ÃèÊö¶ÁÕßÐÐΪ¡£ ´ð£º
Begin {initial value of S is 50}
Parbegin Begin {register } P (S) ;
Register and enter into the reading room ; End;
16