¹ÂÅØ½º¿Í Á¶°Çº¯¼öÀÇ »ç¿ë
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

  • ´ëÆø ¼öÁ¤ ÇÊ¿ä ÇÔ : 20110/2/19
<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=Pthread">Pthread</a>(4) - mutex & Á¶°Çº¯¼ö

Pthread(4) - mutex & Á¶°Çº¯¼ö

À± »ó¹è

yundream@joinc.co.kr



1절. ¼Ò°³

±×µ¿¾È Pthread_1, Pthread_2, Pthread_3, À» ÅëÇØ¼­ pthread ¿¡ ´ëÇÑ ¸î°¡Áö ±âº»ÀûÀÎ ³»¿ëµé¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸¾Ò´Ù.

±×Áß Pthread_3 ¿¡¼­ Á¶°Çº¯¼ö¿Í, mutex Àá±Ý¿¡ ´ëÇÑ ¼³¸íÀÌ ÀÖ¾ú´Âµ¥, ¼³¸í¸¸ ÀÖ¾ú°í ½ÇÁúÀûÀÎ ¿¹¸¦ ÀÌ¿ëÇÑ Å×½ºÆ®´Â ¾ø¾ú´Ù.

À̹ø¿¡´Â mutex Àá±Ý°ú Á¶°Çº¯¼ö¿¡ ´ëÇÑ ÀÌÇØ¸¦ µµ¿ï¼ö ÀÖ´Â °£´ÜÇÑ ¾îÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇØº¸°í ¾î¶°ÇÑ ¹®Á¦Á¡À» °¡Áú¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ Å×½ºÆ®µµ ÇÏ°Ô µÉ°ÍÀÌ´Ù.


2절. Mutex Àá±Ý°ú Á¶°Çº¯¼ö Å×½ºÆ®

2.1절. Å×½ºÆ®¿ë ¾îÇø®ÄÉÀÌ¼Ç °³¿ä

Å×½ºÆ®¿ë ¾îÇø®ÄÉÀ̼ÇÀÇ À̸§Àº mutex_con.c ·Î Çϵµ·Ï ÇϰڴÙ. ÀÌ ÇÁ·Î±×·¥Àº 3°³ÀÇ ¾²·¹µå·Î ÀÌ·ç¾îÁø´Ù. ù ¹øÂ° ¾²·¹µå´Â main ¾²·¹µå·Î ³ª¸ÓÁö 2°³ÀÇ ¾²·¹µå(thread 1, thread 2) ¸¦ »ý¼ºÇϰí (pthread_create) join ÇÏ´Â ÀÏÀ» ÇÏ°Ô µÉ°ÍÀÌ´Ù(Áï Æ¯º°È÷ ÇÏ´ÂÀÏ ¾ø´Ù). 2¹øÂ° ¾²·¹µå´Â 2°³ÀÇ int Çü ¸â¹öº¯¼ö¸¦ °¡Áö´Â ±¸Á¶Ã¼¿¡ Á¢±ÙÇØ¼­ ƯÁ¤ÇÑ ¼ýÀÚ¸¦ ÀÔ·ÂÇÏ°Ô µÈ´Ù. 3¹øÂ° ¾²·¹µå´Â ÀÌ ±¸Á¶Ã¼¿¡ Á¢±ÙÇØ¼­ ¸â¹öº¯¼öÀÇ °ªÀ» Àоî¿Í¼­ "µ«¼À" Çϰí À̸¦ È­¸é¿¡ Ãâ·Â½ÃÄÑÁÖ´Â ÀÏÀ»ÇÑ´Ù.

À̶§ ÀÌ ±¸Á¶Ã¼´Â 2¹ø ¾²·¹µå¿Í 3¹ø¾²·¹µå ¸ðµÎ°¡ Á¢±ÙÇÏ°Ô µÇ¹Ç·Î mutex Àá±ÝÀ» ÀÌ¿ëÇØ¼­ Çѹø¿¡ ÇϳªÀÇ ¾²·¹µå¸¸ Á¢±ÙÇϵµ·Ï Á¦¾îÇØ¾ß µÉ°ÍÀÌ´Ù.

mutex Àá±ÝÀ» ÀÌ¿ëÇÑ Á¢±ÙÁ¦¾î ¿Ü¿¡µµ, 3¹øÂ° ¾²·¹µå´Â 2¹øÂ° ¾²·¹µå¿¡ ÀÇÇØ¼­ ±¸Á¶Ã¼ÀÇ °ªÀÌ º¯°æµÇ¾ú´Ù´Â°É °¨ÁöÇϰí, °ªÀÌ º¯°æµÈ ½ÃÁ¡¿¡¼­ ±¸Á¶Ã¼¿¡ Á¢±ÙÇØ¾ß ÇÑ´Ù. Áï ±¸Á¶Ã¼ÀÇ °ªÀÌ º¯°æµÉ¶§±îÁö ±â´Ù·Á¾ß ÇÑ´Ù. ÀÌ "±â´Ù¸²" À» À§Çؼ­ Á¶°Çº¯¼ö¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.

ÀÌ Á¶°Çº¯¼ö¶ó´Â °ÍÀº °£´ÜÈ÷ ¸»Çؼ­ ½ÅÈ£(signal)¸¦ ÁÖ°í ¹Þ´Â °³³äÀÌ´Ù. ÇÑÂÊ¿¡¼­´Â ½ÅÈ£¸¦ ±â´Ù¸®´Ù°¡, ½ÅÈ£°¡ ¿À¸é ½ÅÈ£¸¦ °¨ÁöÇØ¼­ ÇÊ¿äÇÑ ÀÏÀ» ÇÏ°Ô µÇ´Â °³³äÀÌ´Ù.


2.2절. Á¶°Çº¯¼ö¸¦ ÅëÇØ ¾ò´Â ÇÁ·Î±×·¡¹Ö »óÀÇ ÀÌÁ¡

Á¶°Çº¯¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â ´Ù¸é ¾î¶»°Ô µÉ±î. (¹°·Ð Á¶°Çº¯¼ö ´ë½Å ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÒ¼öµµ ÀÖÀ¸³ª ÀÌ´Â ³í¿Ü·Î ÇÏÀÚ.) ±×·¸´Ù¸é thread 2 ¿¡¼­´Â ±¸Á¶Ã¼ÀÇ Á¤º¸°¡ º¯°æµÇ¾ú´ÂÁö ¾Ë¼ö ¾øÀ½À¸·Î ±¸Á¶Ã¼ÀÇ Á¤º¸°¡ º¯°æµÇ¾ú´ÂÁö È®ÀÎÇϱâ À§Çؼ­ busy wait(¹Ù»Û´ë±â »óÅÂ)¿¡ ³õÀ̸鼭 Áö¼ÓÀûÀ¸·Î °ªÀÌ º¯°æµÇ¾ú´ÂÁö¸¦ È®ÀÎÇØ¾ß ÇÒ°ÍÀÌ´Ù.

ÇÏÁö¸¸ ÀÌ°Ç ÁÁÀº ¹æ¹ýÀÌ ¾Æ´Ï´Ù. busy wait »óŶõ Á¡µµ ¸¾¿¡ µéÁö ¾ÊÁö¸¸ ½ÇÁ¦·Î thread 1 ¿¡¼­ °ªÀ» º¯°æÇߴµ¥ ±âÁ¸ÀÇ °ª°ú °°À»¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ±âÁ¸ÀÇ °ª°ú °°µçÁö ¾Æ´ÏµçÁö °£¿¡ thread 2 ¿¡¼­´Â °ªÀ» Àоîµé¿©¾ß Çϴµ¥, °ªÀÇ º¯°æÀ» È®ÀÎÇÏ´Â ¹æ¹ýÀ¸·Ð üũÀÚü°¡ ºÒ°¡´ÉÇØ Áú¼ö°¡ ÀÖ´Ù.

À§ÀÇ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­ º°µµÀÇ º¯¼ö¸¦ Çϳª´õ µÑ¼ö ÀÖÀ»°ÍÀÌ´Ù. ±×·¡¼­ thread 1 ¿¡¼­ ±¸Á¶Ã¼ÀÇ °ªÀ» º¯°æ½ÃÄ×´Ù¸é ÀÌ º°µµÀÇ ÁغñÇÑ º¯¼öÀÇ °ªÀ» º¯°æÇÏ´Â °ÍÀÌ´Ù. ±×¸®°í thread 2 ¿¡¼­´Â ¹Ù»Û ´ë±â »óÅ¿¡¼­ ÀÌ º¯¼öÀÇ °ªÀÌ º¯°æµÇ¾ú´ÂÁö È®ÀÎÇØ¼­ ±¸Á¶Ã¼ÀÇ °ªÀ» °¡Á®¿À´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇϸé À§ÀÇ ¹®Á¦¸¦ ÇØ°áÇÒ¼ö ÀÖ°ÚÁö¸¸, ¿ª½Ã ¹Ù»Û ´ë±â »óÅ¿¡ ³õÀÌ°Ô µÈ´Ù´Â ´ÜÁ¡À» °¡Áö°Ô µÈ´Ù.

Á¶°Ç º¯¼ö¸¦ »ç¿ëÇϸé ÀÌ·¯ÇÑ ¸ðµç ¹®Á¦¸¦ ÇØ°áÇÒ¼ö ÀÖ´Ù. Á¶°Ç º¯¼ö¸¦ »ç¿ëÇÏ°Ô µÇ¸é thread 2 ¿¡¼­´Â thread 1 ¿¡¼­ Á¶°Çº¯¼ö¸¦ ÅëÇØ¼­ ½Ã±×³ÎÀ» º¸³»±â Àü±îÁö ´ë±â »óÅ¿¡ ³õÀϼö ÀÖÀ»°ÍÀ̱⠶§¹®ÀÌ´Ù.

Á¶°Çº¯¼ö´Â ¸Þ¸ð¸® buffer 󸮵 À¯¿ëÇÏ°Ô »ç¿ëµÉ¼ö ÀÖÀ»°ÍÀÌ´Ù. Á¶°Çº¯¼ö¸¦ »ç¿ëÇÔÀ¸·Î½á, ¸¸¾à¿¡ ¸Þ¸ð¸® buffer ¿¡ ó¸®ÇØ¾ßµÉ ÀÚ·á°¡ ¾ø´Ù¸é busy wait »óÅ¿¡ ³õÀÏ ÇÊ¿ä ¾øÀÌ signal À» ±â´Ù¸®¸é µÉ°ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·¡¼­ signal ÀÌ µµÂøÇÏ¸é ¸Þ¸ð¸® buffer ¿¡ ¿¢¼¼½º¸¦ ½ÃµµÇؼ­ ÃÖ±ÙÀÇ Á¤º¸¸¦ °¡Á®¿À¸é µÉ°ÍÀÌ´Ù. ÀÌ ¿Ü¿¡µµ Á¶°Çº¯¼ö´Â ¾²·¹µå°£ µ¿±âÈ­µî°ú °°Àº ´Ù¸¥ ¿µ¿ª¿¡µµ ¸Å¿ì À¯¿ëÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖ´Ù.


2.3절. ÀÛµ¿ ÇÁ·Î¼¼½º

ÀÛµ¿ ÇÁ·Î¼¼½º´Â ¾î¶»°Ô mutex Àá±Ý°ú Á¶°Çº¯¼ö¸¦ ÀÌ¿ëÇØ¼­ ÀӰ迵¿ªÀ» º¸È£ÇÏ°í ±¸Á¶Ã¼ÀÇ °ªÀÇ º¯°æ½ÃÁ¡À» ¾Ë¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ ³»¿ëÀ» Áß½ÉÀ¸·Î ÇØ¼­ ±â¼úÇÒ°ÍÀÌ´Ù.

  thread 2  
  while (1) 
  {
      mutex Àá±ÝÀ» ¾ò´Â´Ù. 
      // ÀӰ迵¿ª ½ÃÀÛ ----------------------------------------------
      ±¸Á¶Ã¼¿¡ Á¢±ÙÇØ¼­ °ªÀ» °¡Á®¿Â´Ù.  
      ±¸Á¶Ã¼ ¸â¹öº¯¼öÀÇ °ªÀ» º¯°æÇÑ´Ù.(2¾¿ ´õÇÑ´Ù)
      pthrad_cond_signal ¸¦ ÀÌ¿ëÇØ¼­ Á¶°Çº¯¼ö¸¦ ÅëÇØ ½ÅÈ£¸¦ º¸³½´Ù. 
      // ÀӰ迵¿ª ³¡ ------------------------------------------------
      mutex Àá±ÝÀ» µ¹·ÁÁØ´Ù.
	  sleep(1);
  } 

  thread 3
  while(1)
  {
      mutex Àá±ÝÀ» ¾ò´Â´Ù. 
      // ÀӰ迵¿ª ½ÃÀÛ ----------------------------------------------
      pthread_cond_wait ¸¦ ÀÌ¿ëÇØ¼­ Á¶°Çº¯¼ö¸¦ ÅëÇØ ½ÅÈ£°¡ ¿À´ÂÁö ±â´Ù¸°´Ù.   
      if (½ÅÈ£°¡ µµÂøÇÑ´Ù¸é)
          µÎ°³ÀÇ ±¸Á¶Ã¼ ¸â¹öº¯¼öÀÇ °ªÀ» µ¡¼À Çϰí À̸¦ Ãâ·ÂÇÑ´Ù. 
      // ÀӰ迵¿ª ³¡ ------------------------------------------------
      mutex Àá±ÝÀ» µ¹·ÁÁØ´Ù.
  }
			


2.4절. ÄÚµù

ÀÌÁ¦ ÀÛµ¿ÇÁ·Î¼¼½º±îÁö ¸¸µé¾îÁ³À¸´Ï, ÄÚµù¿¡ µé¾î°¡µµ·Ï ÇÑ´Ù. ÄÚµù¿¡ µé¾î°¡±â À§Çؼ­´Â ÀÛµ¿ÇÁ·Î¼¼½º ¿Ü¿¡µµ ¼³°è¼­°¡ ÇÊ¿äÇÒ°ÍÀÌÁö¸¸, ÀÌ·¯ÇÑ °æ¿ì ¸Å¿ì °£´ÜÇÑ ÇÁ·Î±×·¥À¸·Î ÀÛµ¿ÇÁ·Î¼¼½º ÀÚü°¡ ¼³°è¼­³ª ¸¶Âù°¡ÁöÀÓÀ¸·Î ¼³°è¼­ ÀÌ·±°Ç »ý·«Çϵµ·Ï ÇϰڴÙ.

¿¹Á¦ : mutex_con.c

#include <pthread.h>
#include <string.h>
#include <unistd.h>

pthread_mutex_t mutex_lock   = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t   thread_cond  = PTHREAD_COND_INITIALIZER;

struct com_data
{
    int a;
    int b;
};

struct com_data mydata;

void *do_write(void *data)
{
    mydata.a = 0;
    mydata.b = 0;
    while(1)
    {
        pthread_mutex_lock(&mutex_lock);
        mydata.a = random() % 6000;
        mydata.b = random() % 6000;
        pthread_cond_signal(&thread_cond);
        pthread_mutex_unlock(&mutex_lock);
        sleep(2);
    }
}

void *do_read(void *data)
{
    while(1)
    {
        pthread_mutex_lock(&mutex_lock);
        pthread_cond_wait(&thread_cond, &mutex_lock);
        printf("%4d + %4d = %4d\n", mydata.a, mydata.b, mydata.a + mydata.b); 
        pthread_mutex_unlock(&mutex_lock);
    }
}

int main()
{
    pthread_t p_thread[2];
    int thr_id;
    int status;
    int a = 1;
    int b = 2;

    thr_id = pthread_create(&p_thread[0], NULL, do_write, (void *)&a); 
    thr_id = pthread_create(&p_thread[1], NULL, do_read, (void *)&b);

    pthread_join(p_thread[0], (void **) status);
    pthread_join(p_thread[1], (void **) status);

    return 0;
}

			

ÇÁ·Î±×·¥ÀÚü´Â ¸Å¿ì °£´ÜÇÏÁö¸¸ Á¶°Çº¯¼öÀÇ ±âº»ÀûÀÎ »ç¿ë¹æ¹ýÀ» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù.


2.5절. Á¶°Çº¯¼ö »ç¿ë½Ã ÁÖÀÇÇØ¾ßµÉ »çÇ×

Á¶°Çº¯¼ö¿¡´Â pthread_cond_signal(3) °ú ptherad_cond_wait(3) ¸¦ ÀÌ¿ëÇØ¼­ ½ÅÈ£¸¦ ÁÖ°í, ±â´Ù¸®´Â ¹æ½ÄÀ» »ç¿ëÇÑ´Ù°í Çß´Ù. ±×·¸´Ù¸é »ý°¢ÇÒ¼ö Àִ°Ô, °ú¿¬ ½ÅÈ£°¡ ½Ç½Ã°£À¸·Î Àü´ÞÀÌ µÉ°ÍÀ̶õ°É ¹ÏÀ»¼ö ÀÖÀ»±î?

½Ç½Ã°£À¸·Î Àü´ÞµÇ´ÂÁö ¾Æ´ÑÁö°¡ Áß¿äÇÑ ÀÌÀ¯´Â ¾²·¹µå°¡ ½ÅÈ£¸¦ º¸³»°í ³ª¼­ ½ÅÈ£¸¦ Àß¹Þ¾Ò´ÂÁö ±â´Ù¸®Áö ¾Ê°í ¹Ù·Î ´ÙÀ½À¸·Î ³Ñ¾î°¡ ¹ö¸®±â ¶§¹®ÀÌ´Ù.

ÀÌ°Ç ²Ï Áß¿äÇÑ ¹®Á¦°¡ µÉ¼öµµ ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¸¸¾à ½ÅÈ£°¡ ½Ç½Ã°£À¸·Î Àü´ÞµÇÁö ¾Ê´Â´Ù¸é ½ÅÈ£°¡ ¹ÌÃÄ Àü´ÞµÇ±â Àü¿¡ ¾î¶² µ¥ÀÌŸ°¡ º¯°æµÇ¾î ¹ö¸®´Â °æ¿ì°¡ ¹ß»ýÇÒ¼ö Àֱ⠶§¹®ÀÌ´Ù.

            ¾²·¹µå °øÀ¯º¯¼ö A = 0

 thread 1                                    thread 2
 while(1)                                    while(1)
 {                                           {
     ¾²·¹µå °øÀ¯º¯¼ö A++      
     ½ÅÈ£ º¸³¿           ------------------>     ½ÅÈ£  ±â´Ù¸²
  }                                           } 
                                           
			
À§ÀÇ »óȲÀ» »ý°¢ÇØ º¸ÀÚ ÃÖÃÊ °øÀ¯º¯¼ö A ¿¡ 0 ÀÌ µé¾î°£´Ù. thread 1 ¿¡¼­ ¿©±â¿¡ 1 À» Áõ°¡½ÃŰ°í ½ÅÈ£¸¦ º¸³½´Ù. thread 2 ´Â ½ÅÈ£¸¦ ¹Þ°í A ÀÇ °ªÀ» ÀÐ¾î µé¿©¼­ À̰ÍÀ» 100 À¸·Î ³ª´«´Ù. ±×·±µ¥ ½ÅÈ£°¡ ´Ê°Ô º¸³»Á®¼­ - thread 1 ÀÇ loop ȸÀü¼Óµµ°¡ ½ÅÈ£¸¦ º¸³»´Â ½Ã°£º¸´Ù ºü¸¥°æ¿ì - thread 2 ¿¡¼­ ½ÅÈ£¸¦ ¹ÌÃÄ ¹Þ±âÀü¿¡ A ++ ÀÌ Çѹø´õ ½ÇÇàµÇ°í A ÀÇ °ªÀº 2°¡ µÉ°ÍÀÌ´Ù. À̶§ ¼­¾ß thread 2 ·Î ½ÅÈ£°¡ Àü´ÞµÇ¾ú´Ù¸é °á±¹ thread 1 ¿¡¼­´Â 2¹øÀÇ µ¥ÀÌŸ¸¦ º¸³Â´Âµ¥ thread 1 ´Â ÇѹøÀÇ ¿¬»ê¸¸ ½ÇÇàÇѰÍÀ¸·Î µ¥ÀÌŸ Çϳª¸¦ ÀÒ¾î ¹ö¸°°Í°ú °°Àº ¹®Á¦°¡ ¹ß»ýÇØ ¹ö¸°´Ù.

½ÅÈ£´Â ¸Å¿ì ºü¸¥ ½Ã°£¿¡ Àü´ÞµÊÀ¸·Î º¸ÅëÀÇ °æ¿ì ½ÅÈ£Àü´Þ½Ã°£À» ¿°µÎ¿¡ µÎ¾î¾ß ÇÏ´Â °æ¿ì´Â ¹ß»ýÇÏÁö ¾ÊÀ»°ÍÀÌ´Ù. ÇÏÁö¸¸ ºÒÇàÇϰԵµ ¿°µÎ¿¡ µÎ¾î¾ß ÇÏ´Â °æ¿ì°¡ ¹ß»ýÇϱ⵵ ÇÑ´Ù.

¹°·Ð ¿ì¸® ÇÁ·Î±×·¡¸ÓµéÀÇ »çÀü¿¡ ºÒ°¡´ÉÀ̶õ ¾øÀ¸¹Ç·Î À§ÀÇ ¹®Á¦µµ °£´ÜÇÏ°Ô ÇØ°á°¡´É ÇÏ´Ù. Á¶°Çº¯¼ö¸¦ 2°³ ¾²¸é µÈ´Ù. thread 1 ¿¡¼­ ½ÅÈ£¸¦ º¸³Â´Ù¸é, thread 1 Àº ´ÙÀ½ ·çƾÀ¸·Î ³Ñ¾î°¡±â Àü¿¡ thread 2 ¿¡¼­ ³Ñ¾î¿À´Â ½ÅÈ£¸¦ ±â´Ù¸®µµ·Ï ÇÏ¸é µÉ°ÍÀÌ´Ù. thread 2 ´Â thread 1ÀÇ ½ÅÈ£¸¦ ¹ÞÀºµÚ thread 1À¸·Î ½ÅÈ£¸¦ º¸³»°Ô µÉ°ÍÀÓÀ¸·Î ¹Ýµå½Ã ½ÅÈ£°¡ Àü´ÞµÉ°ÍÀ» È®½ÅÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù. 2°³ÀÇ Á¶°Çº¯¼ö¸¦ Áö¿øÇϱâ À§Çؼ­ 2°³ÀÇ mutex Àá±ÝÀÌ ÇÊ¿äÇÒ°ÍÀÌ´Ù. ¿©±â¿¡¼­´Â ±× ±¸Çö±îÁö ¼³¸íÇÏÁö´Â ¾ÊÀ»°ÍÀÌ´Ù. Á¶±Ý¸¸ »ý°¢Çغ¸¸é °£´ÜÇÏ°Ô ±¸Çö °¡´ÉÇÒ°ÍÀ̱⠶§¹®ÀÌ´Ù.

 thread 1                                    thread 2
 while(1)                                    while(1)
 {                                           {
     ¾²·¹µå °øÀ¯º¯¼ö A++      
     ½ÅÈ£ 1 º¸³¿           ----------------->     ½ÅÈ£ 1 ±â´Ù¸²
	 ½ÅÈ£ 2 ±â´Ù¸²         <----------------      ½ÅÈ£ 2 º¸³¿
     ....                                            ....
 }                                           } 
  			

½ÅÈ£ÀÇ Àü´Þ¿¡ °É¸®´Â ½Ã°£Àº ¿î¿µÃ¼Á¦¿¡ µû¶ó »ó´çÇÑ Â÷À̸¦ º¸ÀδÙ. ±×·¯¹Ç·Î ÀÌ·¯ÇÑ ¿ÀÂ÷½Ã°£±îÁöµµ ¿°µÎ¿¡ µÎ¾î¾ßÇÒ »óȲÀÌ ¹ß»ýÇÑ´Ù¸é ½Ã°£Å×½ºÆ®¸¦ ÇØ¾ßÇÒ°ÍÀÌ´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.