µÚÈýÕÂ
˼¿¼ÓëÁ·Ï°Ìâ
1.ÒÔϽø³ÌÖ®¼ä´æÔÚÏà»¥ÖÆÔ¼¹ØÏµÂð£¿Èô´æÔÚ£¬ÊÇÊ²Ã´ÖÆÔ¼¹ØÏµ£¿ÎªÊ²Ã´£¿ £¨1£©¼¸¸öͬѧȥͼÊé¹Ý½èͬһ±¾Êé¡£
´ð£º»¥³â¹ØÏµ£»Ö»ÓÐÒ»±¾Ê飬Ïȵ½ÕßÏȵã¬Ê£ÏµÄÈ˱ØÐëµÈ´ý¡£ £¨2£©ÀºÇò±ÈÈüÖÐÁ½¶ÓͬѧÕùÇÀÀº°åÇò¡£
´ð£º»¥³â¹ØÏµ£»ÏÈÇÀµ½Àº°åÇòÕßÏȵ÷֣¬ÓÉÓÚÕùÇÀÀº°åÇò£¬²úÉúÖÆÔ¼¹ØÏµ¡£ £¨3£©¹ûÖÁ÷Ë®ÏßÉú²úÖе·Ëé¡¢Ïû¶¾¡¢¹à×°¡¢×°ÏäµÈ¸÷µÀ¹¤Ðò¡£
´ð£ºÍ¬²½¹ØÏµ£»¹ûÖµÄÉú²ú´æÔÚijÖÖʱÐò¹ØÏµ£¬ËüÃǰ´Õչ涨µÄʱÐòÖ´ÐУ¬ÒÔ¹²Í¬Íê³ÉÒ»ÏîÈÎÎñ¡£
£¨4£©ÉÌÆ·µÄÈë¿âºÍ³ö¿â¡£
´ð£ºÍ¬²½¹ØÏµ£»Ö»ÓÐÉÌÆ·ÏÈÈë¿âÁ˲ÅÄܳö¿â£¬ËùÒÔ´æÔÚÒ»¶¨µÄʱÐò¹ØÏµ¡£ £¨5£©¹¤ÈË×ö¹¤ÓëÅ©ÃñÖÖÁ¸¡£ ´ð£ºÃ»ÓÐÏà»¥ÖÆÔ¼¹ØÏµ¡£
2.ÔÚ²Ù×÷ϵͳÖÐÒýÈë¹Ü³ÌµÄÄ¿µÄÊÇʲô£¿Ìõ¼þ±äÁ¿µÄ×÷ÓÃÊÇʲô£¿
´ð£ºÓÃÐźÅÁ¿¿ÉÒÔʵÏÖ½ø³ÌÖ®¼äµÄͬ²½ºÍ»¥³â£¬µ«ÒªÉèÖúܶàÐźÅÁ¿£¬Ê¹ÓôóÁ¿µÄP¡¢V²Ù×÷£¬»¹Òª×Ðϸ°²ÅŶà¸öP²Ù×÷µÄÅÅÁдÎÐò£¬·ñÔò½«³öÏÖ´íÎóµÄ½á¹û»ò³öÏÖËÀËøÏÖÏó¡£ÎªÁ˽â¾öÕâЩÎÊÌâÒýÈëÁ˹̡ܳ£
Ìõ¼þ±äÁ¿µÄ×÷ÓãºÌõ¼þ±äÁ¿ÊÇÒ»ÖÖ»úÖÆ£¬Ê¹µÃ½ø³Ì²»½öÄܱ»¹ÒÆð£¬¶øÇÒµ±Ìõ¼þÂú×ãÇҹܳÌÔٴοÉÓÃʱ£¬¿ÉÒÔ»Ö¸´¸Ã½ø³Ì²¢ÔÊÐíËüÔÚ¹ÒÆðµãÖØÐ½øÈë¹Ü³Ì¡£¹Ü³Ì±ØÐëʹÓÃÌõ¼þ±äÁ¿Ìṩ¶Ôͬ²½Ö§³Ö£¬ÕâЩÌõ¼þ±äÁ¿°üº¬ÔڹܳÌÖУ¬²¢ÇÒÖ»ÓÐÔڹܳÌÖвÅÄܱ»·ÃÎÊ¡£ 3£®ËµÃ÷P¡¢V²Ù×÷ΪʲôҪÉè¼Æ³ÉÔÓï¡£
´ð£ºÔÓïÓÉÈô¸ÉÖ¸Áî¹¹³É£¬ÊÇÓÃÓÚÍê³ÉÒ»¶¨¹¦ÄܵĹý³Ì¡£ÓÃÐźÅÁ¿S±íʾ¹²Ïí×ÊÔ´£¬Æä³õֵΪ1±íʾÓÐÒ»¸ö×ÊÔ´¡£ÏÖÔÚÓÐÁ½¸ö½ø³ÌÉêÇë¸Ã×ÊÔ´£¬ÆäÖÐÒ»¸ö½ø³ÌÏÈÖ´ÐÐP²Ù×÷£¬P²Ù×÷ÓÉÈýÌõÖ¸Áî×é³É£¬ÏÈÈ¥SµÄ¼Ä´æÆ÷ʹÆä¼õÒ»ÔÙ¸³¸øS£¬Èô²»ÓÃÔÓïʵÏÖ£¬ÔÚÖ´ÐÐǰÁ½ÌõÖ¸Áîʱ»¹Ã»ÓаÑS-1µÄÖµ¸³¸øS½ø³Ì±»°þ¶áCPU£¬ÁíÒ»½ø³ÌÒ²ÒªÖ´ÐÐP²Ù×÷¡£ÕýÈ·µÄ½á¹ûÊÇÒ»¸ö½ø³ÌÖ´ÐÐÍ꣬ʹÁíÒ»½ø³Ì×èÈû¡£
4£®ÉèÓÐÒ»¸öÊÛÆ±´óÌü£¬¿ÉÈÝÄÉ200È˹ºÆ±¡£Èç¹ûÌüÄÚ²»×ã200ÈËÔòÔÊÐí½øÈ룬³¬¹ýÔòÔÚÌüÍâµÈºò£»ÊÛÆ±Ô±Ä³Ê±Ö»ÄܸøÒ»¸ö¹ºÆ±Õß·þÎñ£¬¹ºÆ±ÕßÂòÍêÆ±ºó¾ÍÀ뿪¡£ÊÔÎÊ£º £¨1£©¹ºÆ±ÕßÖ®¼äÊÇͬ²½¹ØÏµ»¹ÊÇ»¥³â¹ØÏµ£¿ ´ð£º¹ºÆ±ÕßÖ®¼äÊÇ»¥³â¹ØÏµ¡£
£¨2£©ÓÃP¡¢V²Ù×÷ÃèÊö¹ºÆ±ÕߵŤ×÷¹ý³Ì¡£ ´ð£º
9
semaphore empty?200;semaphore mutex?1;void buyer? ?{ P(empty);P(mutex);buy;V(mutex);V(empty);}
5£®½ø³ÇÖ®¼äµÄ¹ØÏµÈçͼ3-16Ëùʾ£¬ÊÔÓÃP¡¢V²Ù×÷ÃèÊöËüÃÇÖ®¼äµÄͬ²½¡£
S2bS1S4aS3cS5gdefS6 ͼ3-16 ½ø³ÌÖ®¼äµÄ¹ØÏµ
´ð£º
?S1;P(a),P(b);??V(b);S2;P(e);??V(a);S3;P(d),P(c);??V(d);S4;P(f);? ?V(c);S5;P(g);??V(e),V(f),V(g);S6;?6£®ÓÐËĸö½ø³ÌP1¡¢P2¡¢P3¡¢ºÍP4¹²ÏíÒ»¸ö»º³åÇø£¬½ø³ÌP1Ïò»º³åÇøÖдæÈëÏûÏ¢£¬½ø³ÌP2¡¢P3ºÍP4´Ó»º³åÇøÖÐÈ¡ÏûÏ¢£¬ÒªÇó·¢ËÍÕß±ØÐëµÈÈý¸ö½ø³Ì¶¼È¡¹ý±¾ÌõÏûÏ¢ºó²ÅÄÜ·¢ËÍÏÂÒ»ÌõÏûÏ¢¡£»º³åÇøÃ¿´ÎÖ»ÄÜÈÝÄÉÒ»¸öÏûÏ¢£¬ÓÃP¡¢V²Ù×÷ÐðÊöËĸö½ø³Ì´æÈ¡ÏûÏ¢µÄÇé¿ö¡£
10
semaphore mutex?0;{P1;V(mutex);}{P(mutex);P2;V(mutex);}{P(mutex);´ð£º
P3;V(mutex);}{P(mutex);P4;V(mutex);}7£®·ÖÎöÉú²úÕß¡ªÏû·ÑÕßÎÊÌâÖжà¸öP²Ù×÷µßµ¹ÒýÆðµÄºó¹û¡£
´ð£º¶à¸öP²Ù×÷µÄ´ÎÐò²»Äܵߵ¹£¬ÔÚ³ÌÐòÖУ¬Ó¦ÏȶÔ×ÊÔ´ÐźÅÖ´ÐÐP²Ù×÷£¬ÔÙ¶Ô»¥³âÐźÅÁ¿Ö´ÐÐP²Ù×÷£¬·ñÔò¿ÉÄÜÒýÆðËÀËø¡£
ÈçÒÔϵijÌÐò½«P²Ù×÷µßµ¹£¬ÏȶԻ¥³âÐźÅÁ¿Ö´ÐÐP²Ù×÷£¬´ËʱÒ׳öÏÖËÀËøÏÖÏ󣬵±Ïû·ÑÕß½ø³ÌÔËÐÐʱ£¬ÔÚfullÐźÅÁ¿ÉÏ×èÈû£¬´Ëʱmutex=0£¬ÔÚÏëÔËÐÐÉú²úÕß³ÌÐòmutex=-1<0£¬´ËʱÉú²úÕß½ø³Ì×èÈû¾Í²úÉúËÀËø£¬Éú²úÕߺÍÏû·ÑÕßÁ½¸ö½ø³Ì¾ù²»ÄÜÔËÐС£
11
semaphore mutex=1;semaphore empty=n;semaphore full=0;int i,j;ITEM buffer[n];ITEM data_p,data_c;void producer(){while (true){ produce an item in data_p; P(mutex); P(empty); buffer[i]=data_p; i=(i+1)%n; V(mutex); V(full); }}void consumer(){while (true){ P(mutex); P(full); data_c=buffer[j]; j=(j+1)%n; V(mutex); V(empty); consume the item in data_c; } }8£®¶ÁÕß¡ªÐ´ÕßÎÊÌâÖÐдÕßÓÅÏÈËã·¨µÄʵÏÖ¡£
12