±à¼ÍƼö: |
±¾Æª²ÉÓÃͼ½â
+ ´ó°×»°µÄÐÎʽÀ´½²½â,Ö÷Òª¾ÍÊǽéÉܲÙ×÷ϵͳÖÐÊÇÓÃʲô·½·¨½â¾ö¶àḬ̈߳²È«.
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£
|
|
ÄÚÈÝ´ó¸Ù

С¹ÊÊÂ
´øÐ½¶×¿Ó£¬ÏàÐŶ¼ÊÇ´ó»ï¶¼°®×öµÄÊÂÇ飬°¢ÐÇÒ²²»ÀýÍ⣬µ«ÊÇÎÒ˾ËùÔÚµÄÂ¥²ãµÄ¿Óλ½ÏÉÙ£¬ÖàÉÙÉ®¶à£¬Ê®·Ö·³ÄÕ¡£
°¢ÐÇ£¨Ïß³ÌA£©Ã¿´ÎÈ¥²ÞËù£¨¹²Ïí×ÊÔ´£©£¬ÃŶ¼ÊÇËø×ŵģ¬ËµÃ÷ÓÐͬÊÂÔÚÀïÃæÕ¼×ſӣ¨Ïß³ÌB³ÖÓÐËø£©£¬Ö»ÄÜÎÞÄεÄÔÚÍâÃæ¹Ô¹ÔµÄµÈ×Å£¬²»¾Ãºó³åË®ÉùÏìÆð£¬Í¬ÊÂˬÍê³öÀ´£¨Ïß³ÌBÊÍ·ÅËø£©£¬°¢ÐÇÒ»¸ö½¡²½½øÈë²ÞËù°ÑÃÅËø×¡£¨Ïß³ÌA³ÖÓÐËø£©£¬ÏíÊÜÊôÓÚ×Ô¼ºµÄ¿Õ¼ä£¬ÍíÀ´µÄÆäËûͬÊÂÖ»ÄܹԹÔÅŶӣ¬Ò»Çж¼ÊÇÄÇô¾®È»ÓÐÐò¡£
¼ÙÉèÃÅËø»µÁË£¬¾®È»ÓÐÐò¾Í²»´æÔÚÁË£¬ÉϲÞËù²»ÔÙÊÇÏíÊÜ£¬¶øÊǸ߶ȽôÕÅ£¬·ÀÖ¹ÃÅͻȻ±»´ò¿ª£¬¸üÔã¸âµÄÊÇ£¬¿ªÃÅʱ£¬ÊǸöÃÃ×Ó£¬Õâϲ»½ö½öÊÇḬ̈߳²È«ÎÊÌ⣬»¹ÓÐÊý×éÔ½½çÁË¡£
¹ÊÊÂ˵Í꣬³¶ÁËÄÇô¶à£¬¾ÍÊÇÏë˵Ã÷£¬ÔÚ¶àÏ̻߳·¾³À¶Ô¹²Ïí×ÊÔ´½øÐвÙ×÷£¬Èç¹û¶àÏß³ÌÖ®¼ä²»×öºÏÀíµÄÐ×÷£¨»¥³âÓëͬ²½£©£¬ÄÇôһ¶¨»á·¢Éú·³µÏÖ³¡¡£
¾ºÕùÌõ¼þ
ÒòΪ¶àÏ̹߳²Ïí½ø³Ì×ÊÔ´£¬ÔÚ²Ù×÷ϵͳµ÷¶È½ø³ÌÄڵĶàÏß³Ìʱ£¬±ØÈ»»á³öÏÖ¶àÏ߳̾ºÕù¹²Ïí×ÊÔ´ÎÊÌ⣬Èç¹û²»²ÉÈ¡ÓÐЧµÄ´ëÊ©£¬Ôò»áÔì³É¹²Ïí×ÊÔ´µÄ»ìÂÒ£¡

À´Ð´¸öСÀý×Ó£¬´´½¨Á½¸öỊ̈߳¬ËüÃÇ·Ö±ð¶Ô¹²Ïí±äÁ¿ i ×ÔÔö 1 Ö´ÐÐ 1000 ´Î£¬ÈçÏ´úÂë

Õý³£À´Ëµ£¬i ±äÁ¿×îºóµÄÖµÊÇ 2000 £¬¿ÉÊDz¢·ÇÈç´Ë£¬ÎÒÃÇÖ´ÐÐÏ´úÂë¿´¿´½á¹û
½á¹û£º2000
½á¹û£º1855
ÔËÐÐÁËÁ½´Î£¬½á¹û·Ö±ðÊÇ1855¡¢2000£¬ÎÒÃÇ·¢ÏÖÿ´ÎÔËÐеĽá¹û²»Í¬£¬ÕâÔÚ¼ÆËã»úÀïÊDz»ÄÜÈÝÈ̵ģ¬ËäÈ»ÊÇС¸ÅÂʳöÏֵĴíÎ󣬵«ÊÇС¸ÅÂÊËüÒ»¶¨ÊǻᷢÉúµÄ¡£
»ã±àÖ¸Áî
ΪÁ˸ãÃ÷°×µ½µ×·¢ÉúÁËʲôÊÂÇ飬ÎÒÃDZØÐëÒªÁ˽â»ã±àÖ¸ÁîÖ´ÐУ¬ÒÔ i ¼Ó 1 ΪÀý×Ó£¬»ã±àÖ¸ÁîµÄÖ´Ðйý³ÌÈçÏÂ

ºÃ¼Ò»ï£¬Ò»¸ö¼Ó·¨¶¯×÷£¬ÔÚ C P U ÔËÐУ¬Êµ¼ÊÒªÖ´ÐÐ 3 ÌõÖ¸Áî¡£
ÏÖÔÚÄ£ÄâÏÂÏß³ÌAÓëÏß³ÌBµÄÔËÐУ¬¼ÙÉè´ËʱÄÚ´æ±äÁ¿ i µÄÖµÊÇ 0£¬Ïß³ÌA¼ÓÔØÄÚ´æµÄ i Öµµ½¼Ä´æÆ÷£¬¶Ô¼Ä´æÆ÷
i Öµ¼Ó 1£¬´Ëʱ i ÖµÊÇ 1£¬Õý×¼±¸Ö´ÐÐÏÂÒ»²½¼Ä´æÆ÷ i Öµ»ØÐ´Äڴ棬ʱ¼äƬʹÓÃÍêÁË£¬·¢ÉúÏß³ÌÉÏÏÂÎÄÇл»£¬±£´æÏ̵߳Ä˽ÓÐÐÅÏ¢µ½Ï߳̿ØÖÆ¿éT
C P¡£
²Ù×÷ϵͳµ÷¶ÈÏß³ÌBÖ´ÐУ¬´ËʱµÄÄÚ´æ±äÁ¿ i ÒÀÈ»»¹ÊÇ 0£¬Ïß³ÌBÖ´ÐÐÓëÏß³ÌAÒ»ÑùµÄ²½Ö裬ËüºÜÐÒÔË£¬ÔÚʱ¼äƬʹÓÃÍêǰ£¬Ö´ÐÐÍêÁ˼Ó
1£¬×îÖÕ»ØÐ´Äڴ棬ÄÚ´æ±äÁ¿ i ÖµÊÇ 1¡£
Ïß³ÌBʱ¼äƬʹÓÃÍêºó£¬·¢ÉúÏß³ÌÉÏÏÂÎÄÇл»£¬»Øµ½Ïß³ÌAÉϴεÄ״̬¼ÌÐøÖ´ÐУ¬¼Ä´æÆ÷ÖÐµÄ i Öµ»ØÐ´Äڴ棬ÄÚ´æ±äÁ¿Ôٴα»ÉèÖóÉ
1¡£
°´Àí˵£¬×îºóµÄ i ÖµÓ¦¸ÃÊÇ 2£¬µ«ÊÇÓÉÓÚ²»¿É¿ØµÄµ÷¶È£¬µ¼ÖÂ×îºó i ÖµÊÇ 1£¬ÏÂÃæÊÇÏß³ÌAÓëÏß³ÌBµÄÁ÷³Ìͼ

µÚÒ»²½£ºÄÚ´æÈ¡³ö i Öµ£¬¼ÓÔØ½ø¼Ä´æÆ÷
µÚ¶þ²½£º¶Ô¼Ä´æÆ÷ÄÚµÄ i Öµ¼Ó 1
µÚÈý²½£º¼Ä´æÆ÷ÄÚµÄ i ֵȡ³ö ¼ÓÔØ½øÄÚ´æ
С½á
ÕâÖÖÇé¿ö³ÆÎª¾ºÕùÌõ¼þ£¨race condition£©£¬¶àÏß³ÌÏ໥¾ºÕù²Ù×÷¹²Ïí×ÊԴʱ£¬ÓÉÓÚÔËÆø²»ºÃ£¬ÔÚÖ´Ðйý³ÌÖз¢ÉúÏß³ÌÉÏÏÂÎÄÇл»£¬×îºóµÃµ½´íÎóµÄ½á¹û£¬ÊÂʵÉÏ£¬Ã¿´ÎÔËÐж¼¿ÉÄܵõ½²»Í¬µÄ½á¹û£¬Òò´ËÊä³öµÄ½á¹û´æÔÚ²»È·¶¨ÐÔ£¨indeterminate£©¡£
»¥³âÓëͬ²½
ΪÁ˽â¾öÒò¾ºÕùÌõ¼þ³öÏÖµÄḬ̈߳²È«£¬²Ù×÷ϵͳÊÇͨ¹ý»¥³âÓëͬ²½À´½â¾ö´ËÀàÎÊÌâ¡£
»¥³â¸ÅÄî
¶àÏß³ÌÖ´Ðй²Ïí±äÁ¿µÄÕâ¶Î´úÂë¿ÉÄܻᵼÖ¾ºÕù״̬£¬Òò´ËÎÒÃǽ«´Ë¶Î´úÂë³ÆÎªÁÙ½çÇø£¨critical section£©£¬ËüÊÇÖ´Ðй²Ïí×ÊÔ´µÄ´úÂëÆ¬¶Î£¬Ò»¶¨²»Äܸø¶àÏß³ÌͬʱִÐС£
ËùÒÔÎÒÃÇÏ£ÍûÕâ¶Î´úÂëÊÇ»¥³â£¨mutualexclusion£©µÄ£¬Ò²¾Í˵ִÐÐÁÙ½çÇø£¨critical
section£©´úÂë¶ÎµÄÖ»ÄÜÓÐÒ»¸öỊ̈߳¬ÆäËûÏß³Ì×èÈûµÈ´ý£¬´ïµ½ÅŶÓЧ¹û¡£

»¥³â²¢²»Ö»ÊÇÕë¶Ô¶àÏ̵߳ľºÕùÌõ¼þ£¬Í¬Ê±»¹¿ÉÓÃÓÚ¶à½ø³Ì£¬±ÜÃâ¹²Ïí×ÊÔ´»ìÂÒ¡£
ͬ²½¸ÅÄî
»¥³â½â¾öÁË¡¸¶à½ø³Ì/Ï̡߳¹¶ÔÁÙ½çÇøÊ¹ÓõÄÎÊÌ⣬µ«ÊÇËüûÓнâ¾ö¡¸¶à½ø³Ì/Ï̡߳¹Ðͬ¹¤×÷µÄÎÊÌâ
ÎÒÃǶ¼ÖªµÀÔÚ¶àÏß³ÌÀÿ¸öÏß³ÌÒ»¶¨ÊÇ˳ÐòÖ´Ðеģ¬ËüÃǸ÷×Ô¶ÀÁ¢£¬ÒÔ²»¿ÉÔ¤ÖªµÄËÙ¶ÈÏòÇ°ÍÆ½ø£¬µ«ÓÐʱºòÎÒÃÇÏ£Íû¶à¸öÏß³ÌÄÜÃÜÇкÏ×÷£¬ÒÔʵÏÖÒ»¸ö¹²Í¬µÄÈÎÎñ¡£
Ëùνͬ²½£¬¾ÍÊÇ¡¸¶à½ø³Ì/Ï̼߳䡹ÔÚһЩ¹Ø¼üµãÉÏ¿ÉÄÜÐèÒª»¥ÏàµÈ´ýÓ뻥ͨÏûÏ¢£¬ÕâÖÖÏà»¥ÖÆÔ¼µÄµÈ´ýÓ뻥ͨÐÅÏ¢³ÆÎª¡¸½ø³Ì/Ï̡߳¹Í¬²½¡£
¾Ù¸öÀý£¬ÓÐÁ½¸ö½ÇÉ«·Ö±ðÊÇÑз¢¡¢ÖÊÁ¿¹Ü¿Ø£¬ÖÊÁ¿¹Ü¿Ø²âÊÔ¹¦ÄÜ£¬ÐèÒªµÈÑС¸·¢Íê³É¿ª·¢¡¹£¬Ñз¢ÒªÐÞbugÒ²ÒªµÈÖÊÁ¿¹Ü¿Ø¡¸²âÊÔÍê³ÉÌá½»B
U G¡¹£¬Õý³£Á÷³ÌÊÇÑз¢Íê³É¿ª·¢£¬Í¨ÖªÖÊÁ¿¹Ü¿Ø½øÐвâÊÔ£¬ÖÊÁ¿¹Ü¿Ø²âÊÔÍê³É£¬Í¨ÖªÑз¢ÈËÔ±ÐÞ¸´bug¡£

»¥³âÓëͬ²½µÄÇø±ð
»¥³â£ºÄ³Ò»×ÊԴͬʱֻÔÊÐíÒ»¸ö·ÃÎÊÕß¶ÔÆä½øÐзÃÎÊ£¬¾ßÓÐΨһÐÔºÍÅÅËüÐÔ¡£µ«»¥³âÎÞ·¨ÏÞÖÆ·ÃÎÊÕß¶Ô×ÊÔ´µÄ·ÃÎÊ˳Ðò£¬¼´·ÃÎÊÊÇÎÞÐòµÄ¡£
¡¸²Ù×÷ A ºÍ²Ù×÷ B ²»ÄÜÔÚͬһʱ¿ÌÖ´ÐС¹
ͬ²½£º»¥³âµÄ»ù´¡ÉÏ£¬Í¨¹ýÆäËü»úÖÆÊµÏÖ·ÃÎÊÕß¶Ô×ÊÔ´µÄÓÐÐò·ÃÎÊ¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬Í¬²½ÒѾʵÏÖÁË»¥³â¡£
¡¸²Ù×÷ A Ó¦ÔÚ²Ù×÷ B ֮ǰִÐС¹£¬¡¸²Ù×÷ C ±ØÐëÔÚ²Ù×÷ A ºÍ²Ù×÷ B ¶¼Íê³ÉÖ®ºó²ÅÄÜÖ´ÐС¹
ÏÔÈ»£¬Í¬²½ÊÇÒ»ÖÖ¸üΪ¸´ÔӵĻ¥³â£¬¶ø»¥³âÊÇÒ»ÖÖÌØÊâµÄͬ²½¡£Ò²¾ÍÊÇ˵»¥³âÊÇÁ½¸öÏß³ÌÖ®¼ä²»¿ÉÒÔͬʱÔËÐУ¬ËûÃÇ»áÏ໥Åų⣬±ØÐëµÈ´ýÒ»¸öÏß³ÌÔËÐÐÍê±Ï£¬ÁíÒ»¸ö²ÅÄÜÔËÐУ¬¶øÍ¬²½Ò²ÊDz»ÄÜͬʱÔËÐУ¬µ«ËûÊDZØÐëÒª°´ÕÕijÖÖ´ÎÐòÀ´ÔËÐÐÏàÓ¦µÄỊ̈߳¨Ò²ÊÇÒ»ÖÖ»¥³â£©£¡
»¥³âÓëͬ²½µÄʵÏÖ
»¥³âÓëͬ²½¿ÉÒÔ±£Ö¤¡¸¶à½ø³Ì/Ï̼߳äÕýÈ·Ð×÷¡¹ £¬µ«ÊÇ»¥³âÓëͬ²½½ö½öÖ»ÊǸÅÄ²Ù×÷ϵͳ±ØÐëÒªÌṩ¶ÔÓ¦µÄʵÏÖ£¬Õë¶Ô»¥³âÓëͬ²½µÄʵÏÖÓÐÏÂÃæÁ½ÖÖ
Ëø£º¼ÓËø¡¢½âËø²Ù×÷£¨»¥³â£©
ÐźÅÁ¿£ºP¡¢V ²Ù×÷£¨Í¬²½£©
ÕâÁ½¸öÖÖ·½Ê½¶¼¿ÉÒÔʵÏÖ¡¸¶à½ø³Ì/Ï̡߳¹»¥³â£¬ÐźÅÁ¿±ÈËøµÄ¹¦ÄܸüǿһЩ£¬Ëü»¹¿ÉÒÔ·½±ãµØÊµÏÖ¡¸¶à½ø³Ì/Ï̡߳¹Í¬²½¡£
Ëø
¹ËÃû˼Ò壬¸øÁÙ½çÇøÉÏÒ»°ÑËø£¬ÈκνøÈëÁÙ½çÇø£©µÄỊ̈߳¬±ØÐëÏÈÖ´ÐмÓËø²Ù×÷£¬¼ÓËø³É¹¦£¬²ÅÄܽøÈëÁÙ½çÇø£¬ÔÚÀ뿪ÁÙ½çÇøÊ±ÔÙÊÍ·ÅËø£¬´ïµ½»¥³âµÄЧ¹û¡£

ËøµÄʵÏÖ·½Ê½ÓÖ·ÖΪ¡¸Ã¦µÈ´ýËø¡¹ºÍ¡¸ÎÞæµÈ´ýËø¡¹
æµÈËø
¼ì²é²¢ÉèÖã¨test-and-set-lock£¬TSL£©ÊÇÒ»ÖÖ²»¿ÉÖжϵÄÔ×ÓÔËË㣬ËüÊôÓÚÔ×Ó²Ù×÷Ö¸Á¿ÉÒÔͨ¹ýËüÀ´ÊµÏÖæµÈËø£¨×ÔÐýËø£©¡£
test-and-set-lock Ö¸Áîα´úÂë

¼ì²é²¢ÉèÖÃ×öÁËÈçϼ¸¸ö²½Öè
¼ì²é¾ÉÖµÊÇ·ñÏàµÈ
ÏàµÈÉèÖÃÐÂÖµ£¬·µ»ØÔ¾ÉÖµ£¨³É¹¦£©
²»ÏàµÈ£¬ÎÞÈκβÙ×÷£¬Ö±½Ó·µ»ØÔ¾ÉÖµ£¨Ê§°Ü£©
ÉÏÃæµÄ²½Ö裬°ÑËü¿´³ÉÒ»²½²¢¾ß±¸Ô×ÓÐÔ£¬Ô×ÓÐÔµÄÒâ˼ÊÇָȫ²¿Ö´Ðлò¶¼²»Ö´ÐУ¬²»»á³öÏÖÖ´Ðе½Ò»°ëµÄÖмä״̬.
α´úÂëtestAndSetLockʵÏÖæµÈËø£¨×ÔÐýËø£©

ÏÂÃæÁ½ÖÖ³¡¾°ÔËÐÐ
µ¥Ị̈߳º¼ÙÉèÒ»¸öÏ̷߳ÃÎÊÁÙ½çÇø£¬Ö´ÐÐ getLock ·½·¨£¬¼ì²é¾ÉÖµ 0 ͨ¹ý£¬¸üÐÂÔ¾ÉÖµ 0 ΪÐÂÖµ
1£¬·µ»ØÔ¾ÉÖµ 0£¬»ñÈ¡Ëø³É¹¦£¬À뿪ÁÙ½çÇøÊ±£¬Ö´ÐÐ unLock ·½·¨£¬¼ì²é¾ÉÖµ 1 ͨ¹ý£¬¸üÐÂÔ¾ÉÖµ
1 ΪÐÂÖµ 0£¬ÊÍ·ÅËø³É¹¦¡£
¶àỊ̈߳º¼ÙÉèÁ½¸öỊ̈߳¬Ïß³ÌA·ÃÎÊÁÙ½çÇø£¬Ö´ÐÐ getLock ·½·¨£¬¼ì²é¾ÉÖµ 0 ͨ¹ý£¬¸üÐÂÔ¾ÉÖµ
0 ΪÐÂÖµ 1£¬·µ»ØÔ¾ÉÖµ 0£¬»ñÈ¡Ëø³É¹¦£¬´ËʱÏß³ÌBÖ´ÐÐ getLock ·½·¨£¬¾ÉÖµ¼ì²éʧ°Ü£¬»ñÈ¡ËøÊ§°Ü£¬Ò»Ö±Ñ»·Ö±µ½¸üгɹ¦ÎªÖ¹£¬µ±Ïß³ÌAÀ뿪ÁÙ½çÇøÊ±£¬Ö´ÐÐ
unLock ·½·¨£¬¼ì²é¾ÉÖµ 1 ͨ¹ý£¬¸üÐÂÔ¾ÉÖµ 1 ΪÐÂÖµ 0£¬ÊÍ·ÅËø³É¹¦£¬Ïß³ÌB»ñÈ¡Ëø³É¹¦¡£
µ±»ñÈ¡²»µ½ËøÊ±£¬Ï߳̾ͻáÒ»Ö± wile Ñ»·£¬²»×öÈκÎÊÂÇ飬ËùÒԾͱ»³ÆÎªÃ¦µÈ´ýËø£¬Ò²±»³ÆÎª×ÔÐýËø¡£
ÕâÊÇ×î¼òµ¥µÄËø£¬Ò»Ö±×ÔÐý£¬ÀûÓà C P U ÖÜÆÚ£¬Ö±µ½Ëø¿ÉÓá£ÔÚµ¥´¦ÀíÆ÷ÉÏ£¬ÐèÒªÇÀռʽµÄµ÷¶ÈÆ÷£¨¼´²»¶Ïͨ¹ýʱÖÓÖжÏÒ»¸öỊ̈߳¬ÔËÐÐÆäËûỊ̈߳©¡£·ñÔò£¬×ÔÐýËøÔÚ
C P U ÉÏÎÞ·¨Ê¹Óã¬ÒòΪһ¸ö×ÔÐýµÄÏß³ÌÓÀÔ¶²»»á·ÅÆú C P U¡£
ÎÞæµÈËø
¹ËÃû˼Ò壬ÎÞæµÈËø²»ÐèÒªÖ÷¶¯×ÔÐý£¬±»¶¯µÈ´ý»½ÐѼ´¿É£¬ÔÚûÓлñÈ¡µ½ËøµÄʱºò£¬¾Í°Ñ¸ÃÏ̼߳ÓÈëµ½µÈ´ý¶ÓÁУ¬Èóö
C P U ¸øÆäËûỊ̈߳¬ÆäËûÏß³ÌÊÍ·ÅËøÊ±£¬Ôٴӵȴý¶ÓÁл½ÐѸÃÏ̡߳£

Á½ÖÖËøµÄʵÏÖ¶¼ÊÇ»ùÓÚ¼ì²é²¢ÉèÖã¨test-and-set-lock£¬TSL£©£¬ÉÏÃæÖ»ÊǼòµ¥µÄα´úÂ룬ʵ¼ÊÉϲÙ×÷ϵͳµÄʵÏÖ»á¸ü¸´ÔÓ£¬µ«ÊÇ»ù±¾Ë¼ÏëÓë´óÖÂÁ÷³Ì»¹ÊÇÓë±¾ÀýÒ»Ñù¡£
ÐźÅÁ¿
²Ù×÷ϵͳÖÐе÷¡¸¶àÏß³Ì/½ø³Ì¡¹¹²Í¬ÅäºÏ¹¤×÷£¬¾ÍÊÇͨ¹ýÐźÅÁ¿ÊµÏֵģ¬Í¨³£ÐźÅÁ¿´ú±í¡¸×ÊÔ´ÊýÁ¿¡¹£¬¶ÔÓ¦Ò»¸öÕûÐÍ£¨s
e n£©±äÁ¿£¬»¹ÓÐÁ½¸öÔ×Ó²Ù×÷µÄϵͳµ÷Óú¯ÊýÀ´¿ØÖÆ¡¸×ÊÔ´ÊýÁ¿¡¹¡£
P ²Ù×÷£º½« s e n ¼õ 1£¬Ïà¼õºó£¬Èç¹û s e n < 0 £¬Ôò½ø³Ì/Ï߳̽øÈë×èÈûµÈ´ý£¬·ñÔò¼ÌÐø£¬P
²Ù×÷¿ÉÄÜ»á×èÈû
V ²Ù×÷£º½« s e n ¼Ó 1 £¬Ïà¼Óºó£¬Èç¹û s e n <= 0£¬»½ÐѵȴýÖеĽø³Ì/Ị̈߳¬V
²Ù×÷²»»á×èÈû
P V²Ù×÷±ØÐëÊdzɶԳöÏÖ£¬µ«ÊÇûÓÐ˳ÐòÒªÇó£¬Ò²¾Í˵Äã¿ÉÒÔP V»òV P¡£
¾Ù¸öÀý×Ó£¬×î½üйڲ¡¶¾ÓÖ³öÀ´µ·ÂÒÁË£¬ÎªÁË×ÔÉí°²È«£¬´ó¼Ò¶¼È¥´òÒßÃ磬ÒòΪҽÉúÖ»ÓÐÁ½Î»£¨Ï൱ÓÚ2¸ö×ÊÔ´µÄÐźÅÁ¿£©£¬ËùÒÔͬʱֻÄÜΪÁ½¸öÈ˽ÓÖÖÒßÃ磬¹ý³ÌÈçÏÂͼ

ÐźÅÁ¿µÈÓÚ 0 ʱ£¬´ú±íÎÞ×ÊÔ´¿ÉÓÃ
ÐźÅÁ¿Ð¡ÓÚ 0 ʱ£¬´ú±íÓÐÏß³ÌÔÚ×èÈû
ÐźÅÁ¿´óÓÚ 0 ʱ£¬´ú±í×ÊÔ´¿ÉÓÃ
ʹÓÃα´úÂëʵÏÖP V ÐźÅÁ¿

P V²Ù×÷µÄº¯ÊýÊÇÓɲÙ×÷ϵͳ¹ÜÀíºÍʵÏֵģ¬ËùÒÔ P V º¯ÊýÊǾßÓÐÔ×ÓÐԵġ£
ʵ¼ù
ÐźÅÁ¿»¹ÊDZȽÏÓÐÒâ˼µÄ£¬ÕâÀïÀ´×ö¼¸¸öʵ¼ù£¬¼ÓÉî´ó¼Ò¶ÔÐźÅÁ¿µÄÀí½â£¬Êµ¼ùµÄÄÚÈÝ·Ö±ðÊÇ
ÐźÅÁ¿ÊµÏÖ»¥³â
ÐźÅÁ¿ÊµÏÖʼþͬ²½
ÐźÅÁ¿ÊµÏÖÉú²úÕßÓëÏû·ÑÕß
»¥³â
ʹÓÃÐźÅÁ¿ÊµÏÖ»¥³â·Ç³£¼òµ¥£¬ÐźÅÁ¿ÊýÁ¿Îª1£¬Ï߳̽øÈëÁÙ½çÇø½øÐÐ P ²Ù×÷£¬À뿪ÁÙ½çÇø½øÐÐ V ²Ù×÷¡£

ʼþͬ²½
ÒÔÇ°ÃæËµµÄÑз¢¡¢ÖÊÁ¿¹Ü¿ØÏß³ÌΪÀý×Ó£¬ÊµÏÖʼþͬ²½µÄЧ¹û£¬Î±´úÂëÈçÏÂ

Ê×ÏȳéÏó³öÁ½¸öÐźÅÁ¿£¬¡¸ÊÇ·ñÄÜÌá²â¡¹Ó롸ÊÇ·ñÄÜÐÞBUG¡¹£¬ËüÃÇĬÈ϶¼ÊÇ·ñ£¬Ò²¾ÍÊÇ 0£¬¹Ø¼üµã¾ÍÊǶÔÁ½¸öÐźÅÁ¿½øÐÐ
P V ²Ù×÷
ÖÊÁ¿¹Ü¿ØÏß³ÌѯÎÊ¿ª·¢Ïß³ÌÓÐûÓÐÍê³É¿ª·¢£¬Ö´ÐÐ P ²Ù×÷ p(this.rDSemaphore)
Èç¹ûûÓÐÍê³É¿ª·¢£¬this.rDSemaphore ¼õ 1 ½á¹ûΪ -1£¬ÖÊÁ¿¹Ü¿ØÏß³Ì×èÈûµÈ´ý»½ÐÑ£¨µÈºóÐøÑз¢Ï߳̽øÐÐ
V ²Ù×÷£©
Èç¹ûÍê³É¿ª·¢£¬ËµÃ÷Ñз¢Ïß³ÌÏÈÖ´ÐÐ V ²Ù×÷ v(this.rDSemaphore) Íê³É¿ª·¢£¬this.rDSemaphore
¼Ó 1 ½á¹û 1£¬´ËʱÖÊÁ¿¹Ü¿ØÏß³Ì P ²Ù×÷ this.rDSemaphore ¼õ 1 ½á¹û 0£¬½øÐкóÃæµÄÌá²â¹¤×÷
Ñз¢Ïß³ÌѯÎÊÖÊÁ¿¹Ü¿ØÏß³ÌÄܲ»ÄÜÐÞ¸´B U G£¬Ö´ÐÐ P ²Ù×÷ p(this.qualitySemaphore)
Èç¹û²»¿ÉÒÔÐÞ¸´B U G£¬this.qualitySemaphore ¼õ 1 ½á¹ûΪ -1£¬Ñз¢Ïß³Ì×èÈûµÈ´ý»½ÐÑ£¨µÈºóÐøÖÊÁ¿¹Ü¿ØÏß³ÌÖ´ÐÐ
V ²Ù×÷£©
Èç¹û¿ÉÒÔÐÞ¸´B U G£¬ËµÃ÷ÖÊÁ¿¹Ü¿ØÏß³ÌÏÈÖ´ÐÐ V ²Ù×÷ v(this.qualitySemaphore)
Ìá½»BUG£¬ this.qualitySemaphore ¼Ó 1 ½á¹ûΪ 1£¬´ËʱÑз¢Ïß³Ì P ²Ù×÷
this.qualitySemaphore ¼õ 1 ½á¹û 0£¬½øÐкóÃæµÄÐÞ¸´ B U G ²Ù×÷
Á÷³Ì
ÖÊÁ¿¹Ü¿ØÏß³ÌÖ´ÐÐ P ²Ù×÷ p(this.rDSemaphore) Äܲ»ÄÜÌá²â£¬this.rDSemaphore
¼õ 1 ½á¹ûÊÇ -1 £¬²»ÄܽøÐÐÌá²â£¬ÖÊÁ¿¹Ü¿ØÏß³Ì×èÈûµÈ´ý»½ÐÑ
Ñз¢Ïß³ÌÔËÐУ¬Ö´ÐÐ V ²Ù×÷ v(this.rDSemaphore) Íê³ÉÑз¢¹¦ÄÜ£¬this.rDSemaphore
¼Ó 1 ½á¹ûÊÇ 0£¬Í¨ÖªÖÊÁ¿¹Ü¿ØÏß³ÌÌá²â
Ñз¢Ï̼߳ÌÐøÖ´ÐÐ P ²Ù×÷ p(this.qualitySemaphore) Äܲ»ÄÜÐÞ¸´B U G£¬this.qualitySemaphor
¼õ 1 ½á¹ûÊÇ -1£¬²»ÄÜÐÞ¸´B U G£¬Ñз¢Ïß³Ì×èÈûµÈ´ý»½ÐÑ
ÖÊÁ¿¹Ü¿ØÏ̻߳½ÐѺó½øÐÐÌá²â£¬Ìá²âÍê±ÏÖ´ÐÐ V ²Ù×÷ v(this.qualitySemaphore)
Íê³ÉÌá²âÓëÌá½»Ïà¹ØB U G£¬this.qualitySemaphore ¼Ó 1 ½á¹ûÊÇ 0£¬Í¨ÖªÑз¢Ï߳̽øÐÐB
U GÐÞ¸´
Éú²úÕßÓëÏû·ÑÕß
Éú²úÕßÓëÏû·ÑÕßÊÇÒ»¸ö±È½Ï¾µäµÄÏß³Ìͬ²½ÎÊÌ⣬ÎÒÃÇÏÈ·ÖÎöÏÂÓÐÄÇЩ½ÇÉ«
Éú²úÕߣºÉú²úʼþ·ÅÈ뻺³åÇø
Ïû·ÑÕߣº´Ó»º³åÇøÏû·Ñʼþ
»º³åÇø£º×°ÔØÊ¼þµÄÈÝÆ÷ 
ÎÊÌâ·ÖÎö¿ÉÒԵóö£º
ÈκÎʱ¿ÌÖ»ÄÜÓÐÒ»¸öÏ̲߳Ù×÷»º³åÇø£¬ËµÃ÷²Ù×÷»º³åÇøÊÇÁÙ½ç´úÂ룬ÐèÒª»¥³â
»º³åÇø¿Õʱ£¬Ïû·ÑÕß±ØÐëµÈ´ýÉú²úÕßÉú³ÉÊý¾Ý
»º³åÇøÂúʱ£¬Éú²úÕß±ØÐëµÈ´ýÏû·ÑÕßÈ¡³öÊý¾Ý
ͨ¹ýÎÊÌâ·ÖÎöÎÒÃÇ¿ÉÒÔ³éÏó³ö3¸öÐźÅÁ¿
»¥³âÐźÅÁ¿£º»¥³â·ÃÎÊ»º³åÇø£¬³õʼ»¯ 1
Ïû·ÑÕß×ÊÔ´ÐźÅÁ¿£º»º³åÇøÊÇ·ñÓÐʼþ£¬³õʼ»¯ 0£¬ÎÞʼþ
Éú²úÕßÐźÅÁ¿£º»º³åÇøÊÇ·ñÓпÕÎ»×°ÔØÊ¼þ£¬³õʼ»¯ N £¨»º³åÇø´óС£©
α´úÂëÈçÏÂ
.jpg)
¹Ø¼üµÄ P V ²Ù×÷ÈçÏÂ
Éú²úỊ̈߳¬ÔÚÍù»º³åÇø×°ÔØÊ¼þ֮ǰ£¬Ö´ÐÐ P ²Ù×÷ p(this.produceSemaphore)
£¬»º³åÇø¿Õ²ÛÊýÁ¿¼õ 1£¬½á¹û < 0 ˵Ã÷ÎÞ¿Õ²Û£¬×èÈûµÈ´ý¡¸Ïû·ÑÏ̡߳¹»½ÐÑ£¬·ñÔòÖ´ÐкóÐøÂß¼
²»ÂÛÊÇÉú²úÏ̻߳¹ÊÇÏû·ÑÏß³ÌÔÚ²Ù×÷»º³åÇø¶¼ÒªÖ´ÐÐ P V ÁÙ½çÇø²Ù×÷ p(this.mutexSemaphore)
Óë v(this.mutexSemaphore)£¬ÕâÀï¾Í²»×ö¹ý¶à¸ÅÊöÁË
Ïû·ÑỊ̈߳¬ÔÚ´Ó»º´æÇøÏû·Ñʼþ֮ǰ£¬Ö´ÐÐ P ²Ù×÷ p(this.consumeSemaphore)£¬»º³åÇøÊ¼þÊýÁ¿¼õ
1£¬½á¹û < 0 ˵Ã÷»º³åÇøÎÞʼþÏû·Ñ£¬×èÈûµÈ´ý¡¸Éú²úÏ̡߳¹»½ÐÑ£¬·ñÖ´ÐкóÐøÂß¼
Éú²úÏß³ÌÓëÏû·ÑỊ̈߳¬Ö´ÐÐÍê¡¸×°ÔØ/Ïû·Ñ¡¹ºó£¬¶¼Òª»½ÐѶÔÓ¦µÄ¡¸Éú²ú/Ïû·ÑÏ̡߳¹£¬Ö´ÐÐ V ²Ù×÷¡¸»º³åÇø¿Õ²Û¼Ó
1/»º³åÇøÊ¼þ¼Ó 1¡¹
|