Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
½ø³Ì¼äͨÐÅ£¨IPC£©£º¹²ÏíÄÚ´æºÍÏûÏ¢¶ÓÁÐÔ­ÀíÏê½â
 
  3491  次浏览      29
 2019-9-2
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔCÓïÑÔÖÐÎÄÍø £¬±¾ÎÄÖ÷Òª½²½âÁËЭ×÷½ø³ÌÈçºÎ¿ÉÒÔͨ¹ý¹²ÏíÄÚ´æ½øÐÐͨÐÅ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

²Ù×÷ϵͳÄڵIJ¢·¢Ö´Ðнø³Ì¿ÉÒÔÊǶÀÁ¢µÄÒ²¿ÉÒÔÊÇЭ×÷µÄ£º

Èç¹ûÒ»¸ö½ø³Ì²»ÄÜÓ°ÏìÆäËû½ø³Ì»òÊÜÆäËû½ø³ÌÓ°Ï죬ÄÇô¸Ã½ø³ÌÊǶÀÁ¢µÄ£¬»»¾ä»°Ëµ£¬²»ÓëÈÎºÎÆäËû½ø³Ì¹²ÏíÊý¾ÝµÄ½ø³ÌÊǶÀÁ¢µÄ£»

Èç¹ûÒ»¸ö½ø³ÌÄÜÓ°ÏìÆäËû½ø³Ì»òÊÜÆäËû½ø³ÌËùÓ°Ï죬ÄÇô¸Ã½ø³ÌÊÇЭ×÷µÄ¡£»»¾ä»°Ëµ£¬ÓëÆäËû½ø³Ì¹²ÏíÊý¾ÝµÄ½ø³ÌΪЭ×÷½ø³Ì¡£

Ìṩ»·¾³ÔÊÐí½ø³ÌЭ×÷£¬¾ßÓÐÐí¶àÀíÓÉ£º

ÐÅÏ¢¹²Ïí£ºÓÉÓÚ¶à¸öÓû§¿ÉÄܶÔͬÑùµÄÐÅÏ¢¸ÐÐËȤ£¨ÀýÈç¹²ÏíÎļþ£©£¬ËùÒÔÓ¦Ìṩ»·¾³ÒÔÔÊÐí²¢·¢·ÃÎÊÕâЩÐÅÏ¢¡£

¼ÆËã¼ÓËÙ£ºÈç¹ûÏ£ÍûÒ»¸öÌØ¶¨ÈÎÎñ¿ìËÙÔËÐУ¬ÄÇôӦ½«Ëü·Ö³É×ÓÈÎÎñ£¬¶øÃ¿¸ö×ÓÈÎÎñ¿ÉÒÔÓëÆäËû×ÓÈÎÎñÒ»Æð²¢ÐÐÖ´ÐС£×¢Ò⣬Èç¹ûҪʵÏÖÕâÑùµÄ¼ÓËÙ£¬ÄÇô¼ÆËã»úÐèÒªÓжà¸ö´¦ÀíºË¡£

Ä£¿é»¯£º¿ÉÄÜÐèÒª°´Ä£¿é»¯·½Ê½¹¹Ôìϵͳ£¬¼´½«ÏµÍ³¹¦ÄֳܷɶÀÁ¢µÄ½ø³Ì»òÏ̡߳£

·½±ã£º¼´Ê¹µ¥¸öÓû§Ò²¿ÉÄÜͬʱִÐÐÐí¶àÈÎÎñ¡£ÀýÈ磬Óû§¿ÉÒÔ²¢Ðеر༭¡¢ÊÕÌýÒôÀÖ¡¢±àÒë¡£

Э×÷½ø³ÌÐèÒªÓÐÒ»ÖÖ½ø³Ì¼äͨÐÅ»úÖÆ£¨¼ò³Æ IPC£©£¬ÒÔÔÊÐí½ø³ÌÏ໥½»»»Êý¾ÝÓëÐÅÏ¢¡£½ø³Ì¼äͨÐÅÓÐÁ½ÖÖ»ù±¾Ä£ÐÍ£º¹²ÏíÄÚ´æºÍÏûÏ¢´«µÝ£¨ÏûÏ¢¶ÓÁУ©£º

¹²ÏíÄÚ´æÄ£ÐͻὨÁ¢ÆðÒ»¿é¹©Ð­×÷½ø³Ì¹²ÏíµÄÄÚ´æÇøÓò£¬½ø³Ìͨ¹ýÏò´Ë¹²ÏíÇøÓò¶Á³ö»òдÈëÊý¾ÝÀ´½»»»ÐÅÏ¢¡£

ÏûÏ¢´«µÝÄ£ÐÍͨ¹ýÔÚЭ×÷½ø³Ì¼ä½»»»ÏûÏ¢À´ÊµÏÖͨÐÅ¡£

ͼ 1 ¸ø³öÁËÕâÁ½ÖÖÄ£Ð͵ĶԱȡ£

ͼ 1 ͨÐÅÄ£ÐÍ

ÉÏÊöÁ½ÖÖÄ£ÐÍÔÚ²Ù×÷ϵͳÖж¼³£¼û£¬¶øÇÒÐí¶àϵͳҲʵÏÖÁËÕâÁ½ÖÖÄ£ÐÍ¡£ÏûÏ¢´«µÝ¶ÔÓÚ½»»»½ÏÉÙÊýÁ¿µÄÊý¾ÝºÜÓÐÓã¬ÒòΪÎÞÐè±ÜÃâ³åÍ»¡£¶ÔÓÚ·Ö²¼Ê½ÏµÍ³£¬ÏûÏ¢´«µÝÒ²±È¹²ÏíÄÚ´æ¸üÒ×ʵÏÖ¡£¹²ÏíÄÚ´æ¿ÉÒÔ¿ìÓÚÏûÏ¢´«µÝ£¬ÕâÊÇÒòΪÏûÏ¢´«µÝµÄʵÏÖ¾­³£²ÉÓÃϵͳµ÷Óã¬Òò´ËÐèÒªÏûºÄ¸ü¶àʱ¼äÒÔ±ãÄں˽éÈë¡£Óë´ËÏà·´£¬¹²ÏíÄÚ´æÏµÍ³½öÔÚ½¨Á¢¹²ÏíÄÚ´æÇøÓòʱÐèҪϵͳµ÷Óã»Ò»µ©½¨Á¢¹²ÏíÄڴ棬ËùÓзÃÎʶ¼¿É×÷Ϊ³£¹æÄÚ´æ·ÃÎÊ£¬ÎÞÐè½èÖúÄںˡ£

¶Ô¾ßÓжà¸ö´¦ÀíºËϵͳµÄ×îÐÂÑо¿±íÃ÷£¬ÔÚÕâÀàϵͳÉÏ£¬ÏûÏ¢´«µÝµÄÐÔÄÜÒªÓÅÓÚ¹²ÏíÄÚ´æ¡£¹²ÏíÄÚ´æ»áÓиßËÙ»º´æÒ»ÖÂÐÔÎÊÌ⣬ÕâÊÇÓɹ²ÏíÊý¾ÝÔÚ¶à¸ö¸ßËÙ»º´æÖ®¼äÇ¨ÒÆ¶øÒýÆðµÄ¡£Ëæ×ÅϵͳµÄ´¦ÀíºËµÄÊýÁ¿µÄÈÕÒæÔö¼Ó£¬¿ÉÄܵ¼ÖÂÏûÏ¢´«µÝ×÷Ϊ IPC µÄÊ×Ñ¡»úÖÆ¡£

¹²ÏíÄÚ´æÏµÍ³

²ÉÓù²ÏíÄÚ´æµÄ½ø³Ì¼äͨÐÅ£¬ÐèҪͨÐŽø³Ì½¨Á¢¹²ÏíÄÚ´æÇøÓò¡£Í¨³££¬¹²ÏíÄÚ´æÇøÓòפÁôÔÚ´´½¨¹²ÏíÄÚ´æ¶ÎµÄ½ø³ÌµØÖ·¿Õ¼äÄÚ¡£ÆäËûÏ£ÍûʹÓÃÕâ¸ö¹²ÏíÄÚ´æ¶Î½øÐÐͨÐŵĽø³ÌÓ¦½«Æä¸½¼Óµ½×Ô¼ºµÄµØÖ·¿Õ¼ä¡£

»ØÒäһϣ¬Í¨³£²Ù×÷ϵͳÊÔͼ×èÖ¹Ò»¸ö½ø³Ì·ÃÎÊÁíÒ»½ø³ÌµÄÄÚ´æ¡£¹²ÏíÄÚ´æÐèÒªÁ½¸ö»ò¸ü¶àµÄ½ø³ÌͬÒâÈ¡ÏûÕâÒ»ÏÞÖÆ£¬ÕâÑùËüÃÇͨ¹ýÔÚ¹²ÏíÇøÓòÄÚ¶Á³ö»òдÈëÀ´½»»»ÐÅÏ¢¡£Êý¾ÝµÄÀàÐÍ»òλÖÃÈ¡¾öÓÚÕâЩ½ø³Ì£¬¶ø²»ÊÇÊÜ¿ØÓÚ²Ù×÷ϵͳ¡£ÁíÍ⣬½ø³Ì¸ºÔðÈ·±£ËüÃDz»ÏòͬһλÖÃͬʱдÈëÊý¾Ý¡£

ΪÁË˵Ã÷Э×÷½ø³ÌµÄ¸ÅÄÎÒÃÇÀ´¿´Ò»¿´Éú²úÕß-Ïû·ÑÕßÎÊÌ⣬ÕâÊÇЭ×÷½ø³ÌµÄͨÓ÷¶Àý¡£Éú²úÕß½ø³ÌÉú³ÉÐÅÏ¢£¬ÒÔ¹©Ïû·ÑÕß½ø³ÌÏû·Ñ¡£ÀýÈ磬±àÒëÆ÷Éú³ÉµÄ»ã±à´úÂë¿É¹©»ã±à³ÌÐòʹÓ㬶øÇÒ»ã±à³ÌÐòÓÖ¿ÉÉú³ÉÄ¿±êÄ£¿éÒÔ¹©¼ÓÔØ³ÌÐòʹÓá£

Éú²úÕß-Ïû·ÑÕßÎÊÌâͬʱ»¹Îª¿Í»§»ú-·þÎñÆ÷·¶ÀýÌṩÁËÓÐÓõıÈÓ÷¡£Í¨³££¬½«·þÎñÆ÷µ±×÷Éú²úÕߣ¬¶ø½«¿Í»§»úµ±×÷Ïû·ÑÕß¡£ÀýÈ磬һ¸ö Web ·þÎñÆ÷Éú³É£¨Ìṩ£©HTML ÎļþºÍͼÏñ£¬ÒÔ¹©ÇëÇó×ÊÔ´µÄ Web ¿Í»§ä¯ÀÀÆ÷ʹÓ㨶ÁÈ¡£©¡£

½â¾öÉú²úÕß-Ïû·ÑÕßÎÊÌâµÄ·½·¨Ö®Ò»ÊDzÉÓù²ÏíÄڴ档ΪÁËÔÊÐíÉú²úÕß½ø³ÌºÍÏû·ÑÕß½ø³Ì²¢·¢Ö´ÐУ¬Ó¦ÓÐÒ»¸ö¿ÉÓõĻº³åÇø£¬ÒÔ±»Éú²úÕßÌî³äºÍ±»Ïû·ÑÕßÇå¿Õ¡£Õâ¸ö»º³åÇø×¤ÁôÔÚÉú²úÕß½ø³ÌºÍÏû·ÑÕß½ø³ÌµÄ¹²ÏíÄÚ´æÇøÓòÄÚ¡£µ±Ïû·ÑÕßʹÓÃÒ»Ïîʱ£¬Éú²úÕ߿ɲúÉúÁíÒ»Ïî¡£Éú²úÕߺÍÏû·ÑÕß±ØÐëͬ²½£¬ÕâÑùÏû·ÑÕß²»»áÊÔͼÏû·ÑÒ»¸öÉÐδÉú²ú³öÀ´µÄÏî¡£

»º³åÇøÀàÐͿɷÖÁ½ÖÖ£º

Î޽绺³åÇøÃ»ÓÐÏÞÖÆ»º³åÇøµÄ´óС¡£Ïû·ÑÕß¿ÉÄܲ»µÃ²»µÈ´ýеÄÏµ«Éú²úÕß×ÜÊÇ¿ÉÒÔ²úÉúÐÂÏî¡£

Óн绺³åÇø¼ÙÉè¹Ì¶¨´óСµÄ»º³åÇø¡£¶ÔÓÚÕâÖÖÇé¿ö£¬Èç¹û»º³åÇø¿Õ£¬ÄÇôÏû·ÑÕß±ØÐëµÈ´ý£»²¢ÇÒÈç¹û»º³åÇøÂú£¬ÄÇôÉú²úÕß±ØÐëµÈ´ý¡£

ÏÂÃæÉîÈë·ÖÎö£¬Óн绺³åÇøÈçºÎÓÃÓÚͨ¹ý¹²ÏíÄÚ´æµÄ½ø³Ì¼äͨÐÅ¡£ÒÔϱäÁ¿×¤ÁôÔÚÓÉÉú²úÕߺÍÏû·ÑÕß¹²ÏíµÄÄÚ´æÇøÓòÖУº

#define BUFFER_SIZE 10
typedef struct {
...
}item£»
item buffer [BUFFER_SIZE];
int in = 0;
int out = 0;

¹²Ïí buffer µÄʵÏÖ²ÉÓÃÒ»¸öÑ­»·Êý×éºÍÁ½¸öÂß¼­Ö¸Õ룺in ºÍ out¡£±äÁ¿ in Ö¸Ïò»º³åÇøµÄÏÂÒ»¸ö¿Õλ£»±äÁ¿ out Ö¸Ïò»º³åÇøµÄµÚÒ»¸öÂúλ¡£µ± in == out ʱ£¬»º³åÇøÎª¿Õ£»µ± (in + 1)%BUFFER SIZE == out ʱ£¬»º³åÇøÎªÂú¡£

Éú²úÕß½ø³ÌºÍÏû·ÑÕß½ø³ÌµÄ´úÂëΪ£º

//Éú²úÕß½ø³Ì
while (true) {
/* produce an item in next .produced */
while (((in + 1) %BUFFER_SIZE) == out)
;/* do nothing */
buffer [in] = next_produced;
in = (in + 1) % BUFFER.SIZE;
}
//Ïû·ÑÕß½ø³Ì
item next_consumed;
while (true) {
while (in == out)
;/* do nothing */
next_consumed = buffer[out];
out = (out + 1) %BUFFER_SIZE;
/* consume the item in next-consumed */
}

Éú²úÕß½ø³ÌÓÐÒ»¸ö¾Ö²¿±äÁ¿ next_produced£¬ÒÔ±ã´æ´¢Éú³ÉµÄÐÂÏÏû·ÑÕß½ø³ÌÓÐÒ»¸ö¾Ö²¿±äÁ¿ next_consumed£¬ÒÔ±ã´æ´¢ËùҪʹÓõÄÐÂÏî¡£

ÏûÏ¢´«µÝϵͳ£¨ÏûÏ¢¶ÓÁУ©

Ç°Ãæ½²½âÁËЭ×÷½ø³ÌÈçºÎ¿ÉÒÔͨ¹ý¹²ÏíÄÚ´æ½øÐÐͨÐÅ¡£´Ë·½°¸ÒªÇóÕâЩ½ø³Ì¹²ÏíÒ»¸öÄÚ´æÇøÓò£¬²¢ÇÒÓ¦ÓóÌÐò¿ª·¢ÈËÔ±ÐèÒªÃ÷È·±àд´úÂ룬ÒÔ·ÃÎʺͲÙ×÷¹²ÏíÄÚ´æ¡£´ïµ½Í¬ÑùЧ¹ûµÄÁíÒ»ÖÖ·½Ê½ÊÇ£¬²Ù×÷ϵͳÌṩ»úÖÆ£¬ÒÔ±ãЭ×÷½ø³Ìͨ¹ýÏûÏ¢´«µÝ¹¦ÄܽøÐÐͨÐÅ¡£

ÏûÏ¢´«µÝÌṩһÖÖ»úÖÆ£¬ÒÔ±ãÔÊÐí½ø³Ì²»±ØÍ¨¹ý¹²ÏíµØÖ·¿Õ¼äÀ´ÊµÏÖͨÐźÍͬ²½¡£¶Ô·Ö²¼Ê½»·¾³£¨Í¨ÐŽø³Ì¿ÉÄÜλÓÚͨ¹ýÍøÂçÁ¬½ÓµÄ²»Í¬¼ÆËã»ú£©£¬ÕâÌØ±ðÓÐÓá£

ÀýÈ磬¿ÉÒÔÉè¼ÆÒ»¸ö»¥ÁªÍøµÄÁÄÌì³ÌÐòÒÔ±ãÁÄÌì²ÎÓëÕßͨ¹ý½»»»ÏûÏ¢Ï໥ͨÐÅ¡£ÏûÏ¢´«µÝ¹¤¾ßÌṩÖÁÉÙÁ½ÖÖ²Ù×÷£ºsend(message) ºÍ receive(message)¡£

½ø³Ì·¢Ë͵ÄÏûÏ¢¿ÉÒÔÊǶ¨³¤µÄ»ò±ä³¤µÄ¡£Èç¹ûÖ»ÄÜ·¢ËͶ¨³¤ÏûÏ¢£¬ÄÇôϵͳ¼¶ÊµÏ־ͼòµ¥¡£²»¹ý£¬ÕâÒ»ÏÞÖÆÊ¹µÃ±à³ÌÈÎÎñ¸ü¼ÓÀ§ÄÑ¡£Ïà·´£¬±ä³¤ÏûÏ¢ÒªÇó¸ü¸´ÔÓµÄϵͳ¼¶ÊµÏÖ£¬µ«ÊDZà³ÌÈÎÎñ±äµÃ¸üΪ¼òµ¥¡£ÔÚÕû¸ö²Ù×÷ϵͳÉè¼ÆÖУ¬ÕâÖÖÕÛÖкܳ£¼û¡£

Èç¹û½ø³Ì P ºÍ Q ÐèҪͨÐÅ£¬ÄÇôËüÃDZØÐ뻥Ïà·¢ËÍÏûÏ¢ºÍ½ÓÊÕÏûÏ¢£ºËüÃÇÖ®¼äÒªÓÐͨÐÅÁ´Â·¡£¸ÃÁ´Â·µÄʵÏÖÓжàÖÖ·½·¨¡£ÕâÀï²»¹ØÐÄÁ´Â·µÄÎïÀíʵÏÖ£¨Èç¹²ÏíÄÚ´æ¡¢Ó²¼þ×ÜÏß»òÍøÂçµÈ£©£¬¶øÖ»¹ØÐÄÁ´Â·µÄÂß¼­ÊµÏÖ¡£

ÕâÀïÓм¸¸ö·½·¨£¬ÓÃÓÚÂß¼­ÊµÏÖÁ´Â·ºÍ²Ù×÷ send()/receive()£º

Ö±½Ó»ò¼ä½ÓµÄͨÐÅ;

ͬ²½»òÒì²½µÄͨÐÅ;

×Ô¶¯»òÏÔʽµÄ»º³å;

ÏÂÃæÑо¿ÕâÐ©ÌØÕ÷µÄÏà¹ØÎÊÌâ¡£

̟̞

ÐèҪͨÐŵĽø³ÌÓ¦ÓÐÒ»¸ö·½·¨£¬ÒԱ㻥ÏàÒýÓá£ËüÃÇ¿ÉÒÔʹÓÃÖ±½Ó»ò¼ä½ÓµÄͨÐÅ¡£

¶ÔÓÚÖ±½ÓͨÐÅ£¬ÐèҪͨÐŵÄÿ¸ö½ø³Ì±ØÐëÃ÷È·Ö¸¶¨Í¨ÐŵĽÓÊÕÕß»ò·¢ËÍÕß¡£²ÉÓÃÕâÖÖ·½°¸£¬Ô­Óï send() ºÍ receive() ¶¨ÒåÈçÏ£º

send(P,message)£ºÏò½ø³ÌP·¢ËÍ message¡£

receive(Q,message)£º´Ó½ø³Ì Q ½ÓÊÕ message¡£

ÕâÖÖ·½°¸µÄͨÐÅÁ´Â·¾ßÓÐÒÔÏÂÊôÐÔ£º

ÔÚÐèҪͨÐŵÄÿ¶Ô½ø³ÌÖ®¼ä£¬×Ô¶¯½¨Á¢Á´Â·¡£½ø³Ì½öÐèÖªµÀ¶Ô·½Éí·Ý¾Í¿É½øÐн»Á÷¡£

ÿ¸öÁ´Â·Ö»ÓëÁ½¸ö½ø³ÌÏà¹Ø¡£

ÿ¶Ô½ø³ÌÖ®¼äÖ»ÓÐÒ»¸öÁ´Â·¡£

ÕâÖÖ·½°¸Õ¹Ê¾ÁËѰַµÄ¶Ô³ÆÐÔ£¬¼´·¢ËͺͽÓÊÕ½ø³Ì±ØÐëÖ¸¶¨¶Ô·½£¬ÒÔ±ãͨÐÅ¡£ÕâÖÖ·½°¸µÄÒ»¸ö±äÐβÉÓÃѰַµÄ·Ç¶Ô³ÆÐÔ£¬¼´Ö»Òª·¢ËÍÕßÖ¸¶¨½ÓÊÕÕߣ¬¶ø½ÓÊÕÕß²»ÐèÒªÖ¸¶¨·¢ËÍÕß¡£²ÉÓÃÕâÖÖ·½°¸£¬Ô­Óï send() ºÍ receive() µÄ¶¨ÒåÈçÏ£º

send(P£¬message)£ºÏò½ø³Ì P ·¢ËÍ message¡£

receive(id, message)£º´ÓÈκνø³Ì£¬½ÓÊÕ message£¬ÕâÀï±äÁ¿ id ±»ÉèÖóÉÓëÆäͨÐŽø³ÌµÄÃû³Æ¡£

ÕâÁ½¸ö·½°¸£¨¶Ô³ÆºÍ·Ç¶Ô³ÆµÄѰַ£©µÄȱµãÊÇ£ºÉú³É½ø³Ì¶¨ÒåµÄÓÐÏÞÄ£¿é»¯¡£¸ü¸Ä½ø³ÌµÄ±êʶ·û¿ÉÄÜÐèÒª·ÖÎöËùÓÐÆäËû½ø³Ì¶¨Òå¡£ËùÓоɵıêʶ·ûµÄÒýÓö¼Ó¦ÕÒµ½£¬ÒÔ±ãÐ޸ijÉΪбêʶ·û¡£Í¨³££¬ÈκÎÕâÑùµÄÓ²±àÂë¼¼Êõ£¨ÆäÖбêʶ·ûÐèÒªÃ÷È·Ö¸¶¨£©£¬ÓëÏÂÃæËùÊöµÄ²ÉÓüä½ÓµÄ¼¼ÊõÏà±ÈÒª²î¡£

ÔÚ¼ä½ÓͨÐÅÖУ¬Í¨¹ýÓÊÏä»ò¶Ë¿ÚÀ´·¢ËͺͽÓÊÕÏûÏ¢¡£ÓÊÏä¿ÉÒÔ³éÏó³ÉÒ»¸ö¶ÔÏ󣬽ø³Ì¿ÉÒÔÏòÆäÖдæ·ÅÏûÏ¢£¬Ò²¿É´ÓÖÐɾ³ýÏûÏ¢£¬Ã¿¸öÓÊÏä¶¼ÓÐÒ»¸öΨһµÄ±êʶ·û¡£

ÀýÈ磬POSIX ÏûÏ¢¶ÓÁвÉÓÃÒ»¸öÕûÊýÖµÀ´±êʶһ¸öÓÊÏä¡£Ò»¸ö½ø³Ì¿ÉÒÔͨ¹ý¶à¸ö²»Í¬ÓÊÏäÓëÁíÒ»¸ö½ø³ÌͨÐÅ£¬µ«ÊÇÁ½¸ö½ø³ÌÖ»ÓÐÓµÓÐÒ»¸ö¹²ÏíÓÊÏäʱ²ÅÄÜͨÐÅ¡£Ô­Óï send() ºÍ receive() ¶¨ÒåÈçÏ£º

send(A, message)£ºÏòÓÊÏä A ·¢ËÍ message¡£

receive(A£¬message)£º´ÓÓÊÏä A ½ÓÊÕ message¡£

¶ÔÓÚÕâÖÖ·½°¸£¬Í¨ÐÅÁ´Â·¾ßÓÐÈçÏÂÌØµã£º

Ö»ÓÐÔÚÁ½¸ö½ø³Ì¹²ÏíÒ»¸öÓÊÏäʱ£¬²ÅÄܽ¨Á¢Í¨ÐÅÁ´Â·¡£

Ò»¸öÁ´Â·¿ÉÒÔÓëÁ½¸ö»ò¸ü¶à½ø³ÌÏà¹ØÁª¡£

Á½¸öͨÐŽø³ÌÖ®¼ä¿ÉÓжà¸ö²»Í¬Á´Â·£¬Ã¿¸öÁ´Â·¶ÔÓ¦ÓÚÒ»¸öÓÊÏä¡£

ÏÖÔÚ¼ÙÉè½ø³Ì P1¡¢P2 ºÍ P3 ¶¼¹²ÏíÓÊÏä A¡£½ø³Ì P1 ·¢ËÍÒ»¸öÏûÏ¢µ½ A£¬¶ø½ø³Ì P2 ºÍ P3 ¶¼¶Ô A Ö´ÐÐ receive()¡£Äĸö½ø³Ì»áÊÕµ½ P1 ·¢Ë͵ÄÏûÏ¢£¿

´ð°¸È¡¾öÓÚËùÑ¡ÔñµÄ·½°¸£º

ÔÊÐíÒ»¸öÁ´Â·×î¶àÖ»ÄÜÓëÁ½¸ö½ø³Ì¹ØÁª¡£

ÔÊÐíÒ»´Î×î¶àÒ»¸ö½ø³ÌÖ´ÐвÙ×÷ receive ()¡£

ÔÊÐíÏµÍ³ËæÒâÑ¡ÔñÒ»¸ö½ø³ÌÒÔ±ã½ÓÊÕÏûÏ¢£¨¼´½ø³Ì P2 ºÍ P3 Á½ÕßÖ®Ò»¶¼¿ÉÒÔ½ÓÊÕÏûÏ¢£¬µ«²»ÄÜÁ½¸ö¶¼¿ÉÒÔ£©¡£ÏµÍ³Í¬Ñù¿ÉÒÔ¶¨ÒåÒ»¸öËã·¨À´Ñ¡ÔñÄĸö½ø³ÌÊǽÓÊÕÕߣ¨ÈçÂÖת£¬½ø³ÌÂÖÁ÷½ÓÊÕÏûÏ¢£©¡£ÏµÍ³¿ÉÒÔÈ÷¢ËÍÕßÖ¸¶¨½ÓÊÕÕß¡£

ÓÊÏä¿ÉÒÔΪ½ø³Ì»ò²Ù×÷ϵͳӵÓС£Èç¹ûÓÊÏäΪ½ø³ÌÓµÓУ¨¼´ÓÊÏäÊǽø³ÌµØÖ·¿Õ¼äµÄÒ»²¿·Ö)£¬ÄÇôÐè񻂿·ÖËùÓÐÕߣ¨Ö»ÄÜ´ÓÓÊÏä½ÓÊÕÏûÏ¢£©ºÍʹÓÃÕߣ¨Ö»ÄÜÏòÓÊÏä·¢ËÍÏûÏ¢£©¡£ÓÉÓÚÿ¸öÓÊÏä¶¼ÓÐΨһµÄ±êʶ·û£¬ËùÒÔ¹ØÓÚË­ÄܽÓÊÕ·¢µ½ÓÊÏäµÄÏûϢûÓÐÈκÎÒÉÎÊ¡£µ±ÓµÓÐÓÊÏäµÄ½ø³ÌÖÕÖ¹£¬ÄÇôÓÊÏäÏûʧ¡£Èκνø³ÌºóÀ´Ïò¸ÃÓÊÏä·¢ËÍÏûÏ¢£¬¶¼»áµÃÖªÓÊÏä²»ÔÙ´æÔÚ¡£

Óë´ËÏà·´£¬²Ù×÷ϵͳӵÓеÄÓÊÏäÊǶÀÁ¢´æÔڵģ»Ëü²»ÊôÓÚij¸öÌØ¶¨½ø³Ì¡£Òò´Ë£¬²Ù×÷ϵͳ±ØÐëÌṩ»úÖÆ£¬ÒÔ±ãÔÊÐí½ø³Ì½øÐÐÈçϲÙ×÷£º

´´½¨ÐµÄÓÊÏä¡£

ͨ¹ýÓÊÏä·¢ËͺͽÓÊÕÏûÏ¢¡£

ɾ³ýÓÊÏä¡£

´´½¨ÐÂÓÊÏäµÄ½ø³ÌȱʡΪÓÊÏäµÄËùÓÐÕß¡£¿ªÊ¼Ê±£¬ËùÓÐÕßÊÇΨһÄÜͨ¹ý¸ÃÓÊÏä½ÓÊÕÏûÏ¢µÄ½ø³Ì¡£²»¹ý£¬Í¨¹ýϵͳµ÷Óã¬ÓµÓÐȨºÍ½ÓÊÕÌØÈ¨¿ÉÒÔ´«¸øÆäËû½ø³Ì¡£µ±È»£¬ÕâÑù¿ÉÒÔµ¼ÖÂÿ¸öÓÊÏä¾ßÓжà¸ö½ÓÊÕÕß¡£

ͬ²½

½ø³Ì¼äͨÐÅ¿ÉÒÔͨ¹ýµ÷ÓÃÔ­Óï send() ºÍ receive() À´½øÐС£ÊµÏÖÕâЩԭÓïÓв»Í¬µÄÉè¼Æ·½°¸¡£ÏûÏ¢´«µÝ¿ÉÒÔÊÇ×èÈû»ò·Ç×èÈû£¬Ò²³ÆÎªÍ¬²½»òÒì²½£º

×èÈû·¢ËÍ£º·¢Ëͽø³Ì×èÈû£¬Ö±µ½ÏûÏ¢ÓɽÓÊÕ½ø³Ì»òÓÊÏäËù½ÓÊÕ¡£

·Ç×èÈû·¢ËÍ£º·¢Ëͽø³Ì·¢ËÍÏûÏ¢£¬²¢ÇÒ»Ö¸´²Ù×÷¡£

×èÈû½ÓÊÕ£º½ÓÊÕ½ø³Ì×èÈû£¬Ö±µ½ÓÐÏûÏ¢¿ÉÓá£

·Ç×èÈû½ÓÊÕ£º½ÓÊÕ½ø³ÌÊÕµ½Ò»¸öÓÐЧÏûÏ¢»ò¿ÕÏûÏ¢¡£

²»Í¬×éºÏµÄ send() ºÍ receive() ¶¼ÓпÉÄÜ¡£µ± send() ºÍ receive() ¶¼ÊÇ×èÈûµÄ£¬ÔòÔÚ·¢ËÍÕߺͽÓÊÕÕßÖ®¼ä¾ÍÓÐÒ»¸ö½»»á¡£µ±²ÉÓÃ×èÈûµÄ send() ºÍ receive()ʱ£¬Éú²úÕß-Ïû·ÑÕßÎÊÌâµÄ½â¾ö¾Í¼òµ¥ÁË¡£Éú²úÕß½öÐèµ÷ÓÃ×èÈû send() ²¢Çҵȴý£¬Ö±µ½ÏûÏ¢±»Ë͵½½ÓÊÕÕß»òÓÊÏ䡣ͬÑù£¬µ±Ïû·ÑÕßµ÷Óà receive() ʱ£¬Ëü»á×èÈûÖ±µ½ÓÐÒ»¸öÏûÏ¢¿ÉÓá£ÕâÖÖÇé¿öÈçÏ´úÂëËùʾ£º

//²ÉÓÃÏûÏ¢´«µÝµÄÉú²úÕß½ø³Ì
message next_produced;
while (true) {
/* produce an item in next_produced */
send (next_produced);
}
//²ÉÓÃÏûÏ¢¶ÓÁеÄÏû·ÑÕß½ø³Ì
message next_consumed;
while (true) {
receive (next_consumed);
/* consume the item in next .consumed */
}

»º´æ

²»¹ÜͨÐÅÊÇÖ±½ÓµÄ»¹ÊǼä½ÓµÄ£¬Í¨ÐŽø³Ì½»»»µÄÏûÏ¢×ÜÊÇפÁôÔÚÁÙʱ¶ÓÁÐÖС£¼òµ¥µØ½²£¬¶ÓÁÐʵÏÖÓÐÈýÖÖ·½·¨£º

ÁãÈÝÁ¿£º¶ÓÁеÄ×î´ó³¤¶ÈΪ 0¡£Òò´Ë£¬Á´Â·Öв»ÄÜÓÐÈκÎÏûÏ¢´¦Óڵȴý¡£¶ÔÓÚÕâÖÖÇé¿ö£¬·¢ËÍÕßÓ¦×èÈû£¬Ö±µ½½ÓÊÕÕß½ÓÊÕµ½ÏûÏ¢¡£

ÓÐÏÞÈÝÁ¿£º¶ÓÁ㤶ÈΪÓÐÏÞµÄ n¡£Òò´Ë£¬×î¶àÖ»ÄÜÓÐ n ¸öÏûϢפÁôÆäÖС£Èç¹ûÔÚ·¢ËÍÐÂÏûϢʱ¶ÓÁÐδÂú£¬ÄÇô¸ÃÏûÏ¢¿ÉÒÔ·ÅÔÚ¶ÓÁÐÖУ¨»òÕ߸´ÖÆÏûÏ¢»òÕß±£´æÏûÏ¢µÄÖ¸Õ룩£¬ÇÒ·¢ËÍÕß¿ÉÒÔ¼ÌÐøÖ´Ðжø²»±ØµÈ´ý¡£Èç¹ûÁ´Â·ÒÑÂú£¬ÄÇô·¢ËÍÕßÓ¦×èÈû£¬Ö±µ½¶ÓÁпռäÓпÉÓõÄΪֹ¡£

ÎÞÏÞÈÝÁ¿£º¶ÓÁг¤¶È¿ÉÒÔÎÞÏÞ£¬Òò´Ë£¬²»¹Ü¶àÉÙÏûÏ¢¶¼¿ÉÔÚÆäÖеȴý¡£·¢ËÍÕß´Ó²»×èÈû¡£

 
   
3491 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤