URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++±à³Ì°æ » µÚ62Ò³ » ¹ØÓÚÀûÓÃsemaphores½â¾öProducer-ConsumerµÄÎÊÌâ¡£
announcement ÉùÃ÷: ±¾Ò³ÄÚÈÝΪÖйúLinuxÂÛ̳µÄÄÚÈݾµÏñ£¬ÎÄÕµİæÈ¨ÒÔ¼°ÆäËûËùÓеÄÏà¹ØÈ¨ÀûÊôÓÚÖйúLinuxÂÛ̳ºÍÏàÓ¦ÎÄÕµÄ×÷Õߣ¬Èç¹û×ªÔØ£¬Çë×¢Ã÷ÎÄÕÂÀ´Ô´¼°Ïà¹Ø°æÈ¨ÐÅÏ¢¡£
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  Òµ½çÐÂÎÅÓëÆÀÂÛ
  ×ÔÓÉÈí¼þÔÓ̸
  IT ÈËÉú
  LinuxÈí¼þ¿ìµÝ
  ·­Òë×÷·»
  LinuxͼÊéÓëÆÀÂÛ
  GNU Emacs/XEmacs
  Linux ÖÐÎÄ»·¾³ºÍÖÐÎÄ»¯
  Linux×ÀÃæÓë°ì¹«Èí¼þ
  Linux ¶àýÌåÓëÓéÀÖ°æ
  ×ÔÓÉÖ®´°Mozilla
  ±Ê¼Ç±¾µçÄÔÉϵÄLinux
  Gentoo
  Debian Ò»×å
  ÍøÂç¹ÜÀí¼¼Êõ
  Linux °²×°ÓëÈëÃÅ
  WEB·þÎñÆ÷ºÍFTP·þÎñÆ÷
  ÓòÃû·þÎñÆ÷ºÍÓʼþ·þÎñÆ÷
  Linux·À»ðǽºÍ´úÀí·þÎñÆ÷Ó¦ÓÃ
  Îļþ¼°´òÓ¡·þÎñÆ÷
  ¼¼ÊõÅàѵÓëÈÏÖ¤
  LinuxÄں˼¼Êõ
  Linux ǶÈë¼¼Êõ
  LinuxÉ豸Çý¶¯³ÌÐò
  Linux ¼¯Èº¼¼Êõ
  LINUXƽ̨Êý¾Ý¿â
  ÏµÍ³ºÍÍøÂ簲ȫ
  CPU Óë ±àÒëÆ÷
  ÏµÍ³¼ÆËãÑо¿ËùרÀ¸
  LinuxϵÄGUIÈí¼þ¿ª·¢
  C/C++±à³Ì°æ
  PHP ¼¼ Êõ
  Java&jsp¼¼Êõ
  Shell±à³Ì¼¼Êõ
  Perl ±à ³Ì
  Python ±à ³Ì
  XML/Web Service ¼¼Êõ
  ÓÀÔ¶µÄUnix
  FreeBSDÊÀ½ç
   
¹ØÓÚÀûÓÃsemaphores½â¾öProducer-ConsumerµÄÎÊÌâ¡£
Author: Pirlo    Posted: 2004-01-31 00:20    Length: 2,137 byte(s)
[Original] [Print] [Top]
ASTµÄ¡¶Modern Operating
System¡·ÀÔÚ½²½âÀûÓÃsemaphore½â¾öProducer-ConsumerÎÊÌâʱ£¬ÓÐÏÂÃæµÄ´úÂ룺
 void producer(void)

{
int item;

while(TRUE){
produce_item(&item);
down(&empty);
down(&mutex);
enter_item(item);

up(&mutex);
up(&full);
}
}

void consumer(void)
{
int item;

while(TRUE){
down(&full);
down(&mutex);
remove_item(&item);
up(&mutex);
up(&empty);
consumer_item(item);
}
}

ÔÚÕâ֮ǰ£¬×÷Õß¶ÔupºÍdown²Ù×÷½øÐÐÁË˵Ã÷¡£¹ØÓÚdownÎÒ¿´×źÜÇå³þ£¬µ«ÊéÀï¶ÔupµÄ˵Ã÷ÎÒ²»ÊǺÜ
Çå³þ¡£ÒòΪÆäËûÊéËäȻҲÓн²ÕâЩ£¬µ«¾ßÌåµÄʵÏÖÈ´ÉÔÓÐÇø±ð£¬ÎªÁËÒ»Ö£¬ÎÒ»¹ÊǾõµÃ°ÑÕâ±¾ÊéÀï
µÄʵÏÖŪ¶®±È½ÏÎÈÍס£

upÒÔsemaphore±äÁ¿Îª²ÎÊý(´«Ö·)£¬²¢¶ÔÆä¼ÓÒ»´¦Àí¡£µ«ÆäºóÓÖÓи½¼Ó˵Ã÷£ºÈç¹û֮ǰÓнø³Ì(ÖÁÉÙ
ÊÇÒ»¸ö)ÒòΪdown´Ësemaphore±äÁ¿¶øsleep£¬ÄÇôupµÄÈÎÎñ»¹°üÀ¨»½ÐÑÆäÖеÄÒ»¸ö½ø³Ì¡£ÎÒÏëÎʵĵ
ÚÒ»¸öÎÊÌâÊÇ£ºÔÚÕâÖÖÇé¿öÏ£¬ÊDz»ÊÇÈÔÒª½øÐмÓÒ»´¦Àí£¿

µÚ¶þ¸öÎÊÌâÊÇ£ºÃ¿¸ödown»òup²Ù×÷Èç¹û¶¼×÷Ϊһ¸ösyscallÀ´´¦Àí(Æä¼äÒª½ûÓÃÖжÏ),ÄÇôÁ¬ÐøµÄÁ½
¸ödown»òup²Ù×÷Ö®¼äÊDz»ÊÇ¿ÉÒÔ¿ªÆôÖжÏ(ÎÒµÄÒâ˼ÊÇÎÊÔÚÖ´ÐÐÍêÒ»¸ödown(»òup)Ö®ºó£¬¿ªÊ¼Ö´ÐÐÁ
íÒ»¸ödown(»òup)֮ǰ£¬ÕâÆÚ¼ä¿ÉÒÔ½øÐнø³Ìת»»£¿)£¿

µÚÈý¸öÎÊÌâÊÇ£ºÉÏÊöµÄProducer(ÔÝÇÒ²»¿¼ÂÇConsumer)½ø³ÌÖУ¬critical
regionÊDz»ÊÇÖ»ÓÐenter_item(item)Õâôһ¾ä£¿Èç¹ûÊÇÕâÑùµÄ»°£¬ÄÇôÔÚËü´úÂëÖеÄÀ¶É«²¿·Ö£¬Á½
¾äÖ®¼äÊDz»ÊÇÒ²ÓпÉÄܱ»Öжϣ¿
ÎÊÁËÕâô¶àÎÊÌ⣬²»ºÃÒâ˼¡£
[Original] [Print] [Top]
« Previous thread
¹ØÓÚÏûÏ¢¶ÓÁÐmsgget, msgsndµÈµÄÎÊÌâ
C/C++±à³Ì°æ
µÚ62Ò³
Next thread »
¹ØÓÚGDBµÄʹÓÃ
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
±¸°¸ÐòºÅ: ¾©ICP±¸05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:54:15, cost 0.0470290184021 ms.