begin begin P(Sr); rc = rc+1; P(S);
if (rc==1) P(S); Write file F; V(Sr); V(S); read file F; end P(Sr); rc = tc-1; if (rc==0) V(S); V(Sr); end
18¡¢Èô¸É¸öµÈ´ý·ÃÎÊ´ÅÅÌÕßÒÀ´ÎÒª·ÃÎʵĴŵÀΪ20£¬44£¬40£¬4£¬80£¬12£¬76£¬¼ÙÉèÃ¿ÒÆ¶¯Ò»¸ö´ÅµÀÐèÒª3ºÁÃëʱ¼ä£¬Òƶ¯±Ûµ±Ç°Î»ÓÚ40ºÅÖùÃæ£¬Çë°´ÏÂÁÐËã·¨·Ö±ðд³ö·ÃÎÊÐòÁв¢¼ÆËãΪÍê³ÉÉÏÊö¸÷´Î·ÃÎÊ×ܹ²»¨·ÑµÄѰµÀʱ¼ä¡£ £¨1£©ÏÈÀ´ÏÈ·þÎñËã·¨£»
£¨2£©×î¶ÌѰµÀʱ¼äÓÅÏÈËã·¨¡£
£¨3£©É¨ÃèËã·¨£¨µ±Ç°´ÅÍ·ÒÆ¶¯µÄ·½ÏòΪ´ÅµÀµÝÔö£©£¨10·Ö£©
½â£º
£¨1£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º20£¬44£¬40£¬4£¬80£¬12£¬76 ѰµÀʱ¼ä=£¨20+24+4+36+76+68+64£©*3=292*3=876 £¨2£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º40£¬44£¬20£¬12£¬4£¬76£¬80 ѰµÀʱ¼ä=£¨0+4+24+8+8+72+4£©*3=120*3=360
£¨3£©´ÅµÀ·ÃÎÊ˳ÐòΪ£º40£¬44£¬76£¬80£¬20£¬12£¬4 ѰµÀʱ¼ä=£¨0+4+32+4+60+8+8£©*3=116*3=348 19¡¢Éú²úÕߺÍÏû·ÑÕßÎÊÌâ £¨10·Ö£©
ÓÐÒ»×éÉú²úÕßP1£¬P2£¬??£¬PMºÍÒ»×éÏû·ÑÕßC1£¬C2£¬??£¬CK£¬ËûÃÇͨ¹ýÓÉn¸ö»·Ðλº³åÇø¹¹³ÉµÄ»º³å³Ø½øÐÐͨÐÅ£¬Éú²úÕ߰ѲúÆ··ÅÈ뻺³åÇø£¬Ïû·ÑÕß´Ó»º³åÇøÈ¡²úÆ·À´Ïû·Ñ¡£ÇëÓÃwaitºÍsignalÔÓïʵÏÖËûÃǵÄͬ²½²Ù×÷¡£ ½â£ºÉú²úÕߺÍÏû·ÑÕßÎÊÌâ begin
Var mutex,empty,full:semaphore:=1,n,0; buffer:array[0,¡,n-1] of item; in,out:integer := 0,0; parbegin
producer: begin repeat produce next product ; wait (empty); wait (mutex); buffer(in):=nextp ; in := (in+1) mod n ; signal (full); signal (mutex); until false ; end consumer: begin
repeat wait (full); wait (mutex); nextc := buffer(out); out := (out+1) mod n; signal (empty); signal (mutex); consume the item in nextc; until false ; end parend end
20¡¢ÇëÓÃÐźÅÁ¿ÃèÊöÕÜѧ¼Ò½ø²ÍÎÊÌâ¡££¨15·Ö£© ½â£ºÕÜѧ¼Ò½ø²ÍÎÊÌ⣨15·Ö£©
public void philosopher (int i) { while (true) { think();
wait (fork[i]);
wait (fork [(i+1) % 5]); eat();
signal(fork [(i+1) % 5]); signal(fork[i]); } }
21£®½ñÓÐÈý¸ö²¢·¢½ø³ÌR£¬M£¬P£¬ËüÃǹ²ÏíÁËÒ»¸ö¿ÉÑ»·Ê¹ÓõĻº³åÇøB£¬»º³åÇøB¹²ÓÐN¸öµ¥Ôª¡£½ø³ÌR¸ºÔð´ÓÊäÈëÉ豸¶ÁÐÅÏ¢£¬Ã¿¶ÁÒ»¸ö×Ö·ûºó£¬°ÑËü´æ·ÅÔÚ»º³åÇøBµÄÒ»¸öµ¥ÔªÖУ»½ø³ÌM¸ºÔð´¦Àí¶ÁÈëµÄ×Ö·û£¬Èô·¢ÏÖ¶ÁÈëµÄ×Ö·ûÖÐÓпոñ·û£¬Ôò°ÑËü¸Ä³É¡°£¬¡±£»½ø³ÌP¸ºÔð°Ñ´¦ÀíºóµÄ×Ö·ûÈ¡³ö²¢´òÓ¡Êä³ö¡£µ±»º³åÇøµ¥ÔªÖеÄ×Ö·û±»½ø³ÌPÈ¡³öºó£¬ÔòÓÖ¿ÉÓÃÀ´´æ·ÅÏÂÒ»´Î¶ÁÈëµÄ×Ö·û¡£ÇëÓÃPV²Ù×÷Ϊͬ²½»úÖÆÐ´³öËüÃÇÄÜÕýÈ·²¢·¢Ö´ÐеijÌÐò¡£ £¨10·Ö£© ½â£º£¨10·Ö£©
begin
Var mutex,input,calculate,output:semaphore:=1,n,0,0; buffer:array[0,¡,n-1] of item; in,mid,out:integer := 0,0,0; proR() { do { wait (input); wait (mutex); buffer(in):=input data; in := (in+1) mod n ; signal (calculate); signal (mutex); while true ; } proM() { do {
wait (calculate); wait (mutex); buffer(middle):=calculate data ; mid := (mid+1) mod n ; signal (output); signal (mutex); } while true ; } proP() { do { wait (output); wait (mutex); buffer(out):=calculate data ; out := (out+1) mod n ; signal (input); signal (mutex); } while true ; }
22.Àí·¢µêÀïÓÐһλÀí·¢Ê¦¡¢Ò»°ÑÀí·¢ÒÎ×ÓºÍÎå°Ñ¹©µÈºòÀí·¢µÄ¹Ë¿Í×øµÄÒÎ×Ó¡£Èç¹ûûÓй˿ͣ¬Àí·¢Ê¦±ãÔÚÀí·¢ÒÎÉÏ˯¾õ¡£µ±Ò»¸ö¹Ë¿Íµ½À´Ê±£¬Ëû±ØÐëÏȽÐÐÑÀí·¢Ê¦£¬Èç¹ûÀí·¢Ê¦ÕýÔÚÀí·¢Ê±ÓÖÓй˿ÍÀ´µ½£¬¶øÈç¹ûÓпÕÒÎ×Ó¿É×ø£¬ËûÃǾÍ×øÏÂÀ´µÈ£¬Èç¹ûûÓпÕÒÎ×Ó£¬Ëû¾ÍÀ뿪¡£ÕâÀïµÄÎÊÌâÊÇΪÀí·¢Ê¦ºÍ¹Ë¿Í¸÷±àдһ¶Î³ÌÐòÀ´ÃèÊöËûÃÇÐÐΪ£¬²¢ÓÃwaitºÍsignalÔÓï²Ù×÷ʵÏÖÆäͬ²½¡££¨10·Ö£© ½â£ºÀí·¢Ê¦ÎÊÌâ
#define CHAIRS 5 /*ΪµÈºòµÄ¹Ë¿Í×¼±¸ÒÎ×ÓÊý*/ typedef int semaphore; /* ÔËÓÃÄãµÄÏëÏñÁ¦*/ semphore customers=0; /*µÈºò·þÎñµÄ¹Ë¿ÍÊý*/ semaphore barbers=0 /*µÈºò·þÎñµÄÀí·¢Ê¦Êý*/ semaphore mutex=1; /*ÓÃÓÚ»¥³â*/
int waiting=0; /*»¹Ã»Àí·¢µÄµÈºò¹Ë¿Í*/ void barber (void) { while(TRUE) {
wait(customers); /*Èç¹û¹Ë¿ÍÊýÊÇ0£¬Ôò˯¾õ*/ wait(mutex); /*ÒªÇó½ø³ÌµÈºò*/ waiting=waiting-1; /*µÈºò¹Ë¿ÍÊý¼õ1*/
signal(barbers); /*Ò»¸öÀí·¢Ê¦ÏÖÔÚ¿ªÊ¼Àí·¢*/ signal(mutex); /*ÊͷŵȺò*/ cut_hair(); /*Àí·¢£¨·ÇÁÙ½çÇø²Ù×÷£©*/ }
void customers (void) { wait(mutex);
if (waiting signal(mutex); } } 23¡¢¸ù¾ÝÈçϵÄǰÇ÷ͼд³ö¿É²¢·¢Ö´ÐеijÌÐò£º£¨10·Ö£© 2 1 5 3 4 6 7 ½â£º£¨10£© ÆÀ·Ö£º±äÁ¿¡¢½ø³Ì¡¢³ÌÐòÖ÷ÌåÿÏîÒ»·Ö¡£ var a,b,c,d,e,f,g,h,i:semaphore := 0,0,0,0,0,0,0,0; begin parbegin begin S1;signal(a); signal(b); end begin wait(a); S2; signal(c);signal(d); end begin wait(c); S3; signal(e);signal(f); end begin wait(b); S4; signal(g); end begin wait(d);wait(e) S5; signal(h); end begin wait(f); wait(g); S6 ; signal(i); end begin wait(h); wait(i); S7; end parend end 24¡¢ÔÚ¹«¹²Æû³µÉÏ£¬³Ë¿ÍÉÏÍêºó£¬ÊÛÆ±Ô±¹ØÃÅ£¬¼ÝʻԱ¿ª³µ£¬ÊÛÆ±Ô±ÊÛÆ±£¬µ½Õ¾Æû³µÍ£ÎȺó£¬ÊÛÆ±Ô±¿ªÃÅ£¬³Ë¿ÍÉÏϳµ£¬ÊÛÆ±Ô±ºÍ¼ÝʻԱ֮¼äÃÜÇÐÅäºÏ£¬Ö±µ½Ï°ࡣÇëÓÃÐźÅÁ¿ÃèÊö¹«¹²Æû³µÉÏÊÛÆ±Ô±Óë¼ÝʻԱµÄ¹¤×÷¹ý³Ì¡££¨10·Ö£© ½â£º½¨Á¢¼ÝʻԱºÍÊÛÆ±Ô±Á½½ø³Ì£¬¼ÝʻԱ½ø³ÌÖ´Ðйý³ÌÈçÏ£º £¨1£© ÅÐÊÛÆ±Ô±¹ØÃÅûÓÐ £¨2£© ¿ª³µ £¨3£© µ½Õ¾ºóÍ£³µ £¨4£© ÖØ¸´£¨1£©££¨3£© ÊÛÆ±Ô±Ö´Ðйý³ÌÈçÏ£º £¨1£© Åжϳ˿ÍÉÏÍêûÓÐ £¨2£© ¹ØÃÅ £¨3£© ÊÛÆ± £¨4£© ÅгµÍ£ÎÈûÓÐ