½â£º±¾ÌâÊǶÁÕߣдÕßÎÊÌâ¡£ÔÚ±¾ÌâÖУ¬ÔÊÐí¶Á½ø³Ìͬʱ¶ÁÊý¾Ý¿â£¬µ«Ð´½ø³ÌÕýÔÚдÊý¾Ý¿âʱ²»ÔÊÐíÆäËû½ø³Ì¶Á¸ÃÊý¾Ý¿â£¬Ò²²»ÔÊÐíÆäËû½ø³Ìд¸ÃÊý¾Ý¿â¡£ÎªÁ˽â¾ö¶Á¡¢Ð´½ø³ÌÖ®¼äµÄͬ²½£¬Ó¦¸ÃÉèÖÃ2¸öÐźÅÁ¿ºÍÒ»¸ö¹²Ïí±äÁ¿£º¶Á»¥³âÐźÅÁ¿rmutex£¬ÓÃÓÚʹ¶Á½ø³Ì»¥³âµØ·ÃÎʹ²Ïí±äÁ¿count£¬Æä³õֵΪ1£»Ð´»¥³âÐźÅÁ¿wmutex£¬ÓÃÓÚʵÏÖд½ø³ÌÓë¶Á½ø³ÌµÄ»¥³â¼°Ð´½ø³ÌÓëд½ø³ÌµÄ»¥³â£¬Æä³õֵΪ1£»¹²Ïí±äÁ¿count£¬ÓÃÓڼǼµ±Ç°ÕýÔÚ¶ÁÊý¾Ý¿âµÄ¶Á½ø³ÌÊýÄ¿£¬³õֵΪ0¡£Æä¹¤×÷¹ý³ÌÃèÊöÈçÏ£º Semaphore rmutex=1; Semaphore wmutex=1; Int count=0; Main() {
Cobegin
Reader(); Writer(); Coend } Reader() {
While(true) {
P(rmutex);
If(count==0) p(wmutex); Count ++; V(rmutex); ¶ÁÊý¾Ý¿â£» P(rmutex); Count --;
If (count==0) v(wmutex); V(rmutex); } } Writer() {
While(true) {
P(wmutex); дÊý¾Ý¿â£»
V(wmutex); } }
×¢Ò⣺ÕýÈ·Àí½âÐźÅÁ¿rmutexµÄÒâÒåÊÇÀí½â¶ÁÕߣдÕßÎÊÌâµÄ¹Ø¼ü¡£RmutexÊÇÒ»¸ö»¥³âÐźÅÁ¿£¬ÓÃÓÚʹ¶Á½ø³Ì»¥³âµØ·ÃÎʹ²
Ïí±äÁ¿count¡£ÐźÅÁ¿rmutex²¢²»±íʾ¶Á½ø³ÌµÄÊýÄ¿£¬±íʾ¶Á½ø³ÌÊýÄ¿µÄÊǹ²Ïí±äÁ¿count¡£µ±Ò»¸ö¶Á½ø³ÌÒª¶ÁÊý¾Ý¿âʱ£¬Ó¦½«¶Á½ø³Ì¼ÆÊýcountÔö¼Ó1£»Èç¹û´Ëǰ£¨count¼Ó1ÒÔǰ£©Êý¾Ý¿âÖÐÎÞ¶Á½ø³Ì£¬»¹Ó¦¶Ôд»¥³âÐźÅÁ¿wmutex×öp²Ù×÷£¬ÕâÑù£¬ÈôÊý¾Ý¿âÖÐÎÞд½ø³ÌÔòͨ¹ýp²Ù×÷×èÖ¹ºóÐøÐ´½ø³Ìд£¬ÈôÊý¾Ý¿âÖÐÓÐд½ø³Ì£¬Ôòͨ¹ýp²Ù×÷ÈöÁ½ø³ÌµÈ´ý¡£Í¬Àí£¬µ±Ò»¸ö¶Á½ø³ÌÍê³É¶ÁÊý¾Ý¿â²Ù×÷ʱ£¬Ó¦½«¶Á½ø³Ì¼ÆÊýcount¼õÉÙ1£»Èç¹û´Ëʱ£¨count¼õ1ÒÔºó£©Êý¾Ý¿âÖÐÒÑÎÞ¶Á½ø³Ì£¬»¹Ó¦¶Ôд»¥³âÐźÅÁ¿wmutex×öv²Ù×÷£¬ÒÔÔÊÐíд½ø³Ìд¡£
6. ¾ÍÐ÷¶ÓÁÐÖÐÓÐ10¸ö½ø³Ì£¬ÏµÍ³½«Ê±¼äƬÉèΪ200ms£¬CPU½øÐнø³ÌÇл»Òª»¨·Ñ10ms£¬ÊÔÎÊϵͳ¿ªÏúËùÕ¼µÄ±ÈÂÊԼΪ¶àÉÙ£¿ ½â£ºÒò¾ÍÐ÷¶ÓÁÐÖÐÓÐ10¸ö½ø³Ì£¬ËüÃÇÒÔʱ¼äƬÂÖתµÄ·½Ê½Ê¹ÓÃCPU£¬Ê±¼äƬ³¤¶ÈΪ200ms¡£µ±Ò»¸öʱ¼äƬÓÃÍêʱ£¬µ÷¶È½ø³Ì½«µ±Ç°ÔËÐнø³ÌÉèÖÃΪ¾ÍÐ÷״̬²¢·ÅÈë¾ÍÐ÷¶ÓÁÐ⣬ÔÙ´Ó¾ÍÐ÷¶ÓÁÐÊ×Ñ¡Ôñ½ø³ÌͶÈëÔËÐУ¬ÕâÒ»¹ý³Ì£¨½ø³ÌÇл»£©Òª»¨·Ñʱ¼ä10ms¡£Òò´Ëϵͳ¿ªÏúËùÕ¼±ÈÂÊΪ£º10/£¨200+10£©=4.8%
7¡¢ÔÚOSÖÐÒýÆð½ø³Ìµ÷¶ÈµÄÖ÷ÒªÒòËØÓÐÄÄЩ£¿ ¡¾½â¡¿
ÔÚOSÖÐÒýÆð½ø³Ìµ÷¶ÈµÄÖ÷ÒªÒòËØÓУº
£¨1£©È±·¦×ÊÔ´¡£ÕýÔÚÔËÐеĽø³ÌÒòΪij¸öÌõ¼þ²»ÄÜÂú×㣬²»µÃ²»½øÈë×èÈû״̬£¬´Ëʱ£¬ÔËÐнø³Ì±»³·Ï£¬ÒýÆðµ÷¶ÈʹÁíÒ»¸ö½ø³Ì½øÈëÔËÐÐ
£¨2£©Ê±¼äƬµ½¡£Èç¹ûÊÇ·Öʱϵͳ»òÕßÒÔʱ¼äƬ×÷Ϊ¼¤Àøµ÷¶ÈµÄϵͳ£¬Ê±¼äƬÊÇÒýÆðÓ²¼þ¼¤ÀøµÄÖ÷ÒªÒòËØ£¬Ã¿µ±Ê±¼äƬµ½£¬ÕýÔÚÔËÐеĽø³Ì±»ÔÝʱֹͣ£¬½«ËüÔÙ´ÎÅÅÈë¾ÍÐ÷¶ÓÁУ¬ÒýÆðµ÷¶ÈʹÁíÒ»¾ÍÐ÷½ø³Ì½øÈëÔËÐС£
£¨3£©ÍⲿÖжϡ£ÍⲿÖжÏÐźÅÒ²½«ÒýÆðµ÷¶È£¬Èç´òÓ¡»ú´òÓ¡Íê³É£¬Í¨¹ý´òӡͨµÀ»òÕßÐźÅÏß·´«ËÍÒ»¼¤ÀøÐźţ¬½«ÔµÈ´ý½ø³Ì»½ÐÑÖØÐ½øÈëÔËÐУ¬»òÒýÆðµ÷¶ÈʹÁíÒ»½ø³ÌÔËÐС£
£¨4£©½ø³Ì½áÊø¡£½ø³ÌÕý³£Ö´ÐÐÍê±Ï£¬Í˳ö²¢ÖÕÖ¹£¬´Ëʱ½«¼¤ÀøÏµÍ³µ÷¶ÈÁíÒ»½ø³Ì½øÈëÔËÐС£
8. ¼ÙÉèÓÐ4µÀ×÷Òµ£¬ËüÃǵÄÌύʱ¼ä¼°Ö´ÐÐʱ¼äÒѸø³ö¡£
×÷ÒµºÅ Ìύʱ¿Ì(ʱ) Ö´ÐÐʱ¼ä(Сʱ) 1 10£º 00 2 2 10£º 20 1 3 10£º 40 0£®5 4 10£º 50 0£®3
²ÉÓÃÏÈÀ´ÏÈ·þÎñµ÷¶ÈËã·¨ºÍ×î¶Ì×÷ÒµÓÅÏȵ÷¶ÈË㷨ʱµÄƽ¾ùÖÜתʱ¼äºÍƽ¾ù´øÈ¨ÖÜתʱ¼ä£¬²¢Ö¸³öËüÃǵĵ÷¶È˳Ðò¡£