µ±Ç°Î»ÖãºÊ×Ò³ > ²Ù×÷ϵͳÁ·Ï°Ìâ
Äڴ棬¶Ô´Å´ø»úºÍ´òÓ¡»ú²ÉÓþ²Ì¬·ÖÅ䷽ʽ£¬²¢¼ÙÉèÊäÈë/Êä³ö²Ù×÷µÄʱ¼äºöÂÔ²»¼Æ¡£ÏÖÓÐÒ»×÷ÒµÐòÁÐÈç±í2-12Ëùʾ£º
±í2-12 ×÷ҵʱ¼ä±í
×÷ÒµºÅ 1 2 3 4 5 µ½´ïʱ¿Ì 8:00 8:20 8:20 8:30 8:35 ÒªÇó¼ÆËãʱ¼ä/min 25 10 20 20 15 ÒªÇóÄÚ´æÁ¿/KB 15 30 60 20 10 ÉêÇë´Å´ø»úÊý/̨ 1 0 1 1 1 ÉêÇë´òÓ¡»úÊý/̨ 1 1 0 0 1 ¼ÙÉè×÷Òµµ÷¶È²ÉÓÃÏÈÀ´ÏÈ·þÎñËã·¨£¬ÓÅÏÈ·ÖÅäÄÚ´æµÄµÍµØÖ·ÇøÓò£¬ÇÒ²»×¼Òƶ¯ÒÑÔÚÄÚ´æÖеÄ×÷Òµ£¬ÔÚÄÚ´æÖеÄ×÷ҵƽ·ÖCPU
ʱ¼ä£¬ÊÔÎÊ£º £¨1£© £¨2£© £¨3£© 5.
×÷Òµµ÷¶ÈÑ¡ÖÐ×÷ÒµµÄ´ÎÐòÊÇʲô£¿
Èç¹û°ÑÒ»¸ö×÷ÒµµÄÖÜתʱ¼ä¶¨ÒåΪµ½´ïϵͳÖÁ¼ÆËãÍê³ÉµÄʱ¼ä£¬Ôò×î´óºÍ×îСµÄ×÷ÒµÖÜתʱ¼äÊǶàÉÙ£¿ ×÷ҵȫ²¿Ö´ÐнáÊøµÄʱ¼äÊǶàÉÙ£¿
ÉèÓÐÁ½¸öÉú²úÕß½ø³ÌA¡¢BºÍÒ»¸öÏúÊÛÕß½ø³ÌC£¬ËûÃǹ²ÏíÒ»¸öÎÞÏÞ´óµÄ²Ö¿â£¬Éú²úÕßÿ´ÎÑ»·Éú²úÒ»¸ö²úÆ·£¬È»ºóÈë¿â¹©ÏúÊÛÕßÏúÊÛ£»ÏúÊÛÕßÿ´ÎÑ»·´Ó²Ö¿âÖÐÈ¡³öÒ»¸ö²úÆ·½øÐÐÏúÊÛ¡£Èç¹û²»ÔÊÐíͬʱÈë¿â£¬Ò²²»ÔÊÐí±ßÈë¿â±ß³ö¿â£¬¶øÇÒÒªÇóÉú²úºÍÏúÊÛA²úÆ·ºÍB²úÆ·µÄ¼þÊý¶¼Âú×ãÒÔϹØÏµ£º-n<=AµÄ¼þÊý-BµÄ¼þÊý<=m,ÆäÖÐn¡¢m¶¼ÊÇÕýÕûÊý¡£ÇëÓÃÐźÅÁ¿»úÖÆÐ´³öA¡¢B¡¢CÈý¸ö½ø³ÌµÄ¹¤×÷Á÷³Ì¡£
6. ¿¼ÂÇÓÐÈý¸öÎüÑÌÕß½ø³ÌºÍÒ»¸ö¾ÏúÉ̽ø³ÌµÄϵͳ¡£Ã¿¸öÎüÑÌÕßÁ¬Ðø²»¶ÏµØ×öÑÌ¾í²¢³éËû×öºÃµÄÑÌ¾í¡£×öÒ»Ö§Ñ̾íÐèÒªÑ̲ݡ¢Ö½ºÍ»ð²ñÈýÖÖÔÁÏ¡£ÕâÈý¸öÎüÑÌÕß·Ö±ðÕÆÎÕÓÐÑ̲ݡ¢Ö½ºÍ»ð²ñ¡£¾ÏúÉÌÔ´Ô´²»¶ÏµØÌṩÉÏÊöÈýÖÖÔÁÏ£¬µ«ËûÖ»½«ÆäÖеÄÁ½ÖÖÔÁÏ·ÅÔÚ×À×ÓÉÏ£¬¾ßÓÐÁíÒ»ÖÖÔªÁϵÄÎüÑÌÕ߾ͿÉÒÔ×öÑÌ¾í²¢³éÑÌ£¬ÇÒÔÚ×öÍêºó¸ø¾ÏúÉÌ·¢Ðźţ¬È»ºó¾ÏúÉÌÔÚÄóöÁ½ÖÖÔÁÏ·ÅÔÚ×ÀÉÏ£¬Èç´Ë·´¸´£¬ÊÔÉè¼ÆÒ»¸öͬ²½Ëã·¨À´ÃèÊöËûÃǵĻ¡£
½â£ºÉèÕûÐͱäÁ¿r£¬s±íʾÿ¸öÎüÑÌÕß½ø³ÌËùÐèÒªµÄÁ½ÖÖÔÁÏ£¬Æäȡֵ·¶Î§ÔÚ0µ½2Ö®¼ä¡£Í¬²½Ëã·¨ÈçÏ£º begin
a£ºarray[0..2] OF semaphore£» a£º=0£» agent£º=1£» r£¬s£ºINTEGER£» Cobegin Process A Begin Repeat
Set I,j to value between 0 and 2; P(agent); V(a[i]); V(a[j]); Until false; End;
Process B Begin Repeat P(a[r]); P(a[s]); Smoking;
µÚ 13 Ò³ ¹² 26 Ò³
V(agent); Until false; End; Coend; End. 7.
ÔÚ²âÁ¿¿ØÖÆÏµÍ³ÖУ¬Êý¾Ý²É¼¯ÈÎÎñ°ÑËù²É¼¯µ½µÄÊý¾ÝËÍÈëÒ»¸öµ¥»º³åÇø£º¼ÆËãÈÎÎñ´Óµ¥»º³åÇøÖÐÈ¡³öÊý¾Ý½øÐмÆËã¡£ÊÔд³öÀûÓÃÐźÅÁ¿»úÖÆÊµÏÖÁ½Õß¹²Ïíµ¥»º³åÇøµÄͬ²½Ëã·¨¡£
ÔÚ±¾ÌâÖвɼ¯ÈÎÎñÓë¼ÆËãÈÎÎñ¹²ÓÃÒ»¸öµ¥»º³åÇø£®µ±²É¼¯ ÈÎÎñ²É¼¯µ½Ò»¸öÊý¾Ýºó£¬Ö»Óе±»º³åÇøÎª¿Õʱ²ÅÄܽ«Êý¾ÝËÍÈ뻺³åÇøÖдæ·Å£¬·ñÔòÓ¦µÈ´ý»º³åÇøÌÚ¿Õ;µ±»º³åÇøÖÐÓÐÊý¾Ýʱ£¬¼ÆËãÈÎÎñ²ÅÄÜ´Ó»º³åÇøÖÐÈ¡³öÊý¾Ý½øÐмÆË㣬·ñÔòÒ²Ó¦µÈ´ý¡£ ±¾Ìâʵ¼ÊÉÏÊÇÒ»¸öÉú²úÕß¡ªÏû·ÑÕßÎÊÌâ¡£½«Éú²úÕß¡ªÏû·ÑÕßÎÊÌâ³éÏó³öÀ´£¬ÒÔÁíÍâ Ò»ÖÖÐÎʽÃèÊöÊÇÒ»ÖÖ³£¼ûµÄÊÔÌâÐÎʽ£®Ö»Òª¶ÔÉú²úÕß¡ªÏû·ÑÕßÎÊÌâÓÐÁËÉîÈëµÄÀí ½â£¬¾Í²»Äѽâ¾ö´ËÀàÊÔÌâ¡£
½â;ÔÚ±¾ÌâÖУ¬Ó¦ÉèÖÃÁ½¸öÐźÅÁ¿Sf,Se£¬ÐźÅÁ¿Sf±íʾ»º³åÇøÖÐÊÇ·ñÓпɹ©´òÓ¡µÄ¼ÆËã½á¹û£¬Æä³õֵΪ0;ÐźÅÁ¿SeÓÃÓÚ±íʾ»º³åÇøÓÐÎÞ¿ÕλÖôæ·ÅеÄÐÅÏ¢£¬Æä³õֵΪ1¡£ ±¾ÌâµÄͬ²½ÃèÊöÈçÏ£º int Se=l; int Sf=0; main() { cobegin get();
compute();
coend } get() { while (²É¼¯¹¤×÷δÍê³É) { ²É¼¯Ò»¸öÊý¾Ý£º p(Se); ½«Êý¾ÝËÍÈ뻺³åÇøÖÐ; v(Sf); } }
compute() { while(¼ÆË㹤×÷δÍê³É) { p(Sf); ´Ó»º³åÇøÖÐÈ¡³öÊý¾Ý; v(Se); ½øÐÐÊý¾Ý¼ÆËã; } }
ͼ2£®7¸ø³öÁËËĸö½ø³ÌºÏ×÷Íê³ÉijһÈÎÎñµÄǰÇ÷ͼ£¬ÊÔ˵Ã÷ÕâËĸö½ø³Ì¼äµÄͬ²½¹Ø
ϵ£¬²¢ÓÃP¡¢V²Ù×÷ÃèÊöËü¡£P35
µÚ 14 Ò³ ¹² 26 Ò³
ͼ2£®7 ËĸöºÏ×÷½ø³ÌµÄǰÇ÷ͼ
½â£ºÍ¼2£®7˵Ã÷ÈÎÎñÆô¶¯ºóS1ÏÈÖ´ÐС£µ±S1½áÊøºó£¬S2¡¢S3¿ÉÒÔ¿ªÊ¼Ö´ÐС£S2¡¢S3 Íê³Éºó£¬S4²ÅÄÜ¿ªÊ¼Ö´ÐС£ÎªÁËÈ·±£ÕâÒ»Ö´ÐÐ˳Ðò£¬ÉèÈý¸öͬ²½ÐźÅÁ¿b2¡¢b3¡¢b4·Ö±ð ±íʾ½ø³ÌS2¡¢S3¡¢S4ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ö´ÐУ¬Æä³õÖµ¾ùΪ0¡£ÕâËĸö½ø³ÌµÄͬ²½ÃèÊöÈçÏ£º int b2=0; /*±íʾ½ø³ÌS2ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ö´ÐÐ*£¯ int b3=0; /*±íʾ½ø³ÌS3ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ö´ÐÐ*£¯ int b4=0; /*±íʾ½ø³ÌS4ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ö´ÐÐ*£¯ main() { cobegin S1 ( ); S2 ( ); S3 ( ); S4 ( ); coend }
S1 ( ) { ©« v(b2); v(b3); }
S2 ( ) { p(b2); ©« v(b4); }
S3 ( ) { p(b3)£º ©« v(b4); }
S4 ( ) { p(b4); p(b4); /*ÒòÔÚS2¼°S3Íê³Éʱ¾ù¶Ôb4×öÁËv²Ù×÷£¬Òò´ËÕâÀïÒªÓÃÁ½¸öp²Ù×÷*£¯ ©« } 8.
×ÀÉÏÓÐÒ»¿ÕÅÌ£¬ÔÊÐí´æ·Åһֻˮ¹û¡£°Ö°Ö¿ÉÏòÅÌÖÐ·ÅÆ»¹û£¬Ò²¿ÉÏòÅÌÖзŽÛ×Ó£¬¶ù×ÓרµÈ³ÔÅÌÖеĽÛ×Ó£¬Å®¶ùרµÈ³ÔÅÌÖÐµÄÆ»¹û¡£¹æ¶¨µ±ÅÌ¿Õʱһ´ÎÖ»ÄÜ·Åһֻˮ¹û¹©³ÔÕßÓã¬ÇëÓÃP¡¢VÔÓïʵÏÖ°Ö°Ö¡¢¶ù×Ó¡¢Å®¶ùÈý¸ö²¢·¢½ø³ÌµÄͬ²½¡£ [·ÖÎö¼°Ïà¹ØÖªÊ¶] ÔÚ±¾ÌâÖУ¬°Ö°Ö¡¢¶ù×Ó¡¢Å®¶ù¹²ÓÃÒ»¸öÅÌ×Ó£¬ÇÒÅÌÖÐÒ»´ÎÖ»ÄÜ·ÅÒ»¸öË®¹û£®µ±ÅÌ×ÓΪ¿Õʱ£¬°Ö°Ö¿É½«Ò»¸öË®¹û·ÅÈë¹ûÅÌÖС£Èô·ÅÈë¹ûÅÌÖеÄÊǽÛ×Ó£¬ÔòÔÊÐí¶ù×Ó³Ô£¬Å®¶ù±ØÐëµÈ´ý;Èô·ÅÈë¹ûÅÌÖеÄÊÇÆ»¹û£¬ÔòÔÊÐíÅ®¶ù³Ô£¬¶ù×Ó±ØÐëµÈ´ý¡£±¾Ìâʵ¼ÊÉÏÊÇÉú²úÕß¡ªÏû·ÑÕßÎÊÌâµÄÒ»ÖÖ±äÐΡ£ÕâÀÉú²úÕß·ÅÈ뻺³åÇøµÄ²úÆ·ÓÐÁ½À࣬Ïû·ÑÕßÒ²ÓÐÁ½À࣬ÿÀàÏû·ÑÕßÖ»Ïû·ÑÆäÖй̶¨µÄÒ»Àà²úÆ·¡£
½â£ºÔÚ±¾ÌâÖУ¬Ó¦ÉèÖÃÈý¸öÐźÅÁ¿S¡¢So¡¢Sa£¬ÐźÅÁ¿S±íʾÅÌ×ÓÊÇ·ñΪ¿Õ£¬Æä³õÖµ Ϊ1;ÐźÅÁ¿So±íʾÅÌÖÐÊÇ·ñÓнÛ×Ó£¬Æä³õֵΪ0;ÐźÅÁ¿Sa±íʾÅÌÖÐÊÇ·ñÓÐÆ»¹û£¬Æä³õ
µÚ 15 Ò³ ¹² 26 Ò³
ֵΪ0¡£Í¬²½ÃèÊöÈçÏ£º int S=1; int Sa=O£º int So=O£º main( ) { cobegin father(); son(); daughter()£º coend }
father() { while (1) { p(S); ½«Ë®¹û·ÅÈëÅÌÖÐ; if(·ÅÈëµÄÊǽÛ×Ó) v(So)£º else v(Sa); } )
son( ) { while(1) { p(So); ´ÓÅÌÖÐÈ¡³ö½Û×Ó; v(S); ³Ô½Û×Ó; } }
dau[shter() { while(1) { p(Sa); ´ÓÅÌÖÐÈ¡³öÆ»¹û; v(S)£º ³ÔÆ»¹û; } } 9.
ÓÐÈý¸ö½ø³ÌPA¡¢PBºÍPCºÏ×÷½â¾öÎļþ´òÓ¡ÎÊÌ⣺PA½«Îļþ¼Ç¼´Ó´ÅÅ̶ÁÈëÖ÷´æµÄ»º³åÇø1£¬Ã¿Ö´ÐÐÒ»´Î¶ÁÒ»¸ö¼Ç¼£»PB½«»º³åÇø1µÄÄÚÈݸ´ÖƵ½»º³åÇø2£¬Ã¿Ö´ÐÐÒ»´Î¸´ÖÆÒ»¸ö¼Ç¼£»PC½«»º³åÇø2µÄÄÚÈÝ´òÓ¡³öÀ´£¬Ã¿Ö´ÐÐÒ»´Î´òÓ¡Ò»¸ö¼Ç¼¡£»º³åÇøµÄ´óСµÈÓÚÒ»¸ö¼Ç¼´óС¡£ÇëÓÃP¡¢V²Ù×÷À´±£Ö¤ÎļþµÄÕýÈ·´òÓ¡¡£ 1£©P¡¢V²Ù×÷ÊÇÁ½ÌõÔÓ¶¨ÒåÈçÏ£º
P²Ù×÷£ºP²Ù×÷¼ÇΪP(S)£¬ÆäÖÐSΪһÐźÅÁ¿£¬ËüÖ´ÐÐʱÖ÷ÒªÍê³ÉÏÂÊö¶¯×÷£º S=S-1
ÈôS>=0£¬Ôò½ø³Ì¼ÌÐøÔËÐС£
ÈôS<0£¬Ôò¸Ã½ø³Ì±»×èÈû£¬²¢½«Ëü²åÈë¸ÃÐźÅÁ¿µÄµÈ´ý¶ÓÁÐÖС£
V²Ù×÷£ºV²Ù×÷¼ÇΪV(S)£¬ÆäÖÐSΪһÐźÅÁ¿£¬ËüÖ´ÐÐʱÖ÷ÒªÍê³ÉÏÂÊö¶¯×÷£º S=S+1
ÈôS>0£¬Ôò½ø³Ì¼ÌÐøÔËÐС£
ÈôS<=0£¬Ôò´ÓÐźÅÁ¿µÄµÈ´ý¶ÓÁÐÖÐÒÆ³ö¶ÓÊ×½ø³Ì¡£Ê¹Æä±äΪ¾ÍÐ÷״̬¡£
£¨2£©ÃèÊöÈçÏ£º
Var empty1,empty2,full1,full2:semaphore:=1,1,0,0;ª¥ beginª¥ parbeginª¥
µÚ 16 Ò³ ¹² 26 Ò³
¹²·ÖÏí92ƪÏà¹ØÎĵµ