Mutex¸¦ ÀÌ¿ëÇÑ ¾²·¹µå µ¿±âÈ­
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Contents

1 È÷½ºÅ丮
2 °øÀ¯ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù Á¦¾î
3 µ¿±âÈ­ ´Þ¼ºÀÇ ¹æ¹ý
4 Mutex
5 ¹ÂÅØ½º ¸¸µé±â
6 ¹ÂÅØ½º Àá±Ý, Àá±ÝÇØÁ¦, Á¦°Å

1 È÷½ºÅ丮

  1. ³»¿ë ´ëÆø ¼öÁ¤ : 2010/2/19

2 °øÀ¯ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±Ù Á¦¾î

´Ù¼öÀÇ °´Ã¼°¡ °øÀ¯ ÀÚ¿ø¿¡ Á¢±ÙÇÏ·Á°í Çϸé, (°øÀ¯ ÀÚ¿øÀÇ Á¾·ù¿¡ µû¶ó¼­)Á¢±Ù ½ÃÁ¡À» µ¿±âÈ­ ½ÃÄÑÁÙ Çʿ䰡 »ý±ä´Ù. ¿©±â¿¡¼­ µ¿±âÈ­¶õ ½Ã°£°ú °ø°£À» ¸ÂÃß¾î Áشٴ Àǹ̷Î, Áï °øÀ¯ ÀÚ¿ø ¿µ¿ª (°ø°£)¿¡ Á¢±ÙÇÏ´Â °´Ã¼µéÀÇ ÁøÀÔ ½Ã°£À» Á¦¾îÇÒ ¼ö ÀÖ¾î¾ß ÇÔÀ» ÀǹÌÇÑ´Ù.

¸ÖƼ Thread(¾²·¹µå) ÇÁ·Î±×·¥ ¿ª½Ã °øÀ¯ ÀÚ¿ø¿¡ ¿©·¯ °³ÀÇ ¾²·¹µå°¡ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¹Ç·Î °øÀ¯ ÀÚ¿ø ¿µ¿ª¿¡ ´ëÇÑ µ¿±âÈ­°¡ ÇÊ¿ä ÇÏ´Ù.

Ä«¿îÆÃ ÇÁ·Î±×·¥À» ¿¹¸¦ µé¾î º¸ÀÚ. Ä«¿îÆ® º¯¼ö´Â Àü¿ª º¯¼ö·Î A,B µÎ°³ÀÇ ¾²·¹µå°¡ °øÀ¯Çϸ鼭, 1¾¿ Áõ°¡ÇÏ´Â Ä«¿îÆÃ Á¤º¸¸¦ À¯ÁöÇϱâ À§ÇØ »ç¿ëµÈ´Ù. °øÀ¯ ÀÚ¿ø ¿µ¿ª Áï "count °ªÀ» ÀÐ¾î ¿À°í, ¿¬»êÀ» ÇØ¼­ ÀúÀåÇÏ´Â" ¿µ¿ª¿¡ ´ëÇÑ ¾²·¹µå°£ µ¿±âÈ­°¡ ÀÌ·ç¾îÁöÁö ¾Ê´Â ´Ù¸é ¾Æ·¡¿Í °°Àº ÀÏÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  1. global int count = 0
  2. A ¾²·¹µå°¡ count°ª 0À» Àд´Ù.
  3. B ¾²·¹µå°¡ count°ª 0À» Àд´Ù.
    • A ¾²·¹µå°¡ Ä«¿îÆÃ ¿¬»êÀ» Çϱâ Àü¿¡ B¾²·¹µå°¡ Á¢±ÙÇØ ¹ö¸° »óȲÀÌ´Ù.
  4. A ¾²·¹µå°¡ count+1 ¿¬»êÀ» ÇÏ°í °ªÀ» ¾´´Ù. count = 1
  5. B ¾²·¹µå°¡ count+1 ¿¬»êÀ» ÇÏ°í °ªÀ» ¾´´Ù. count = 1
A¿Í B¾²·¹µå°¡ Çѹø¾¿ Ä«¿îÆÃ ¿¬»êÀ» ÇßÀ¸¹Ç·Î, count°ªÀº 2°¡ µÇ¾î¾ß ÇϰÚÁö¸¸, ½ÇÁ¦·Î´Â 1ÀÌ ÀúÀåµÇ¾î ¹ö·È´Ù.

ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ­ ¾²·¹µå¸¦ µ¿±âÈ­ ½ÃÄÑÁÙ Çʿ䰡 ÀÖ´Ù.

3 µ¿±âÈ­ ´Þ¼ºÀÇ ¹æ¹ý

ÀϹÝÀûÀ¸·Î µ¿±âÈ­´Â "°ø°£°ú ½Ã°£"À» Á¦¾îÇÏ´Â ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù. Áï "Á¢±Ù Á¦¾î°¡ ÇÊ¿äÇÑ °ø°£"À» ÁöÁ¤Çϰí ÁöÁ¤ÇÑ "°ø°£¿¡ ÁøÀÔ ÇÒ ¼ö ÀÖ´Â ½Ã°£"À» Á¦¾îÇÏ´Â ¹æ½ÄÀÌ´Ù.

¿©±â¿¡¼­ "Á¢±Ù Á¦¾î°¡ ÇÊ¿äÇÑ °ø°£"¿¡´Â º¸È£ ÇØ¾ß ÇÒ °øÀ¯ ÀÚ¿øÀÌ ³õÀδÙ. º¸È£ ÇØ¾ßÇÒ °øÀ¯ ÀÚ¿øÀÌ ÀÖ´Â °ø°£À» ÀÓ°è ¿µ¿ªÀ̶ó°í ÇÑ´Ù. ½Ã°£ Á¦¾î´Â ÇØ´ç ÀÓ°è ¿µ¿ª¿¡ µ¿ ½Ã°£¿¡ ´ÜÁö ÇϳªÀÇ ¾²·¹µå¸¸ Á¢±ÙÇϵµ·Ï Á¦ÇÑ ÇÏ´Â ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù.

ÀӰ迵¿ª¿¡ µé¾î°¡±â À§ÇÑ ÇϳªÀÇ Å°¸¦ °¡Áö°í °æÀïÇÏ´Â °ÍÀ¸·Î ÀÌÇØÇÏ¸é µÈ´Ù. ÀӰ迵¿ª¿¡ µé¾î°¡±â À§ÇÑ Å°´Â ´ÜÁö Çϳª ¹Û¿¡ ¾øÀ¸¹Ç·Î ¾î¶² ½º·¹µå°¡ ۸¦ ¾ò¾î¼­ ÀӰ迵¿ª¿¡ ÁøÀÔÇϸé, ´Ù¸¥ ½º·¹µå´Â ۸¦ ¾òÀ» ¶§±îÁö - ¾Õ¼­ ÀӰ迵¿ª¿¡ ÁøÀÔÇÑ ÇÁ·Î¼¼½º°¡ ۸¦ µÇµ¹·ÁÁÙ ¶§±îÁö - ±â´Ù·Á¾ß ÇÑ´Ù.


À§ÀÇ Ä«¿îÆÃ ÇÁ·Î±×·¥À» ¿¹·Î ¼³¸íÇØº¸ÀÚ. ÀÓ°è ¿µ¿ªÀº
  1. count °ªÀ» Àоî¿Í¼­
  2. Ä«¿îÆÃ ¿¬»êÀ» Çϰí
  3. ¿¬»ê °á°ú¸¦ ÀúÀåÇÏ´Â
ÄÚµå ¿µ¿ªÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ÀÓ°è ¿µ¿ª¿¡´Â ¿ÀÁ÷ ÇϳªÀÇ ¾²·¹µå¸¸ÀÌ ÁøÀÔÇÒ ¼ö ÀÖ´Ù. Áï ¾²·¹µå A°¡ ÀÓ°è ¿µ¿ª¿¡ ÁøÀÔÇØ¼­ Äڵ带 ¼öÇàÁß¿¡ ÀÖ´Ù¸é ¾²·¹µå B´Â ÀÓ°è ¿µ¿ª ¹Û¿¡¼­ ±â´Ù·Á¾ß ÇÑ´Ù. ÀÌ·¸°Ô ¾²·¹µå¸¦ µ¿±âÈ­ ½ÃÅ´À¸·Î½á, ¾Æ·¡¿Í °°ÀÌ Á¦´ë·ÎµÈ Ä«¿îÆÃ ¿¬»êÀ» º¸ÀåÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
  1. global int count = 0;
  2. A ¾²·¹µå°¡ ÀÓ°è ¿µ¿ª¿¡ ÁøÀÔ
  3. B ¾²·¹µåµµ ÀÓ°è ¿µ¿ª ÁøÀÔÀ» ½ÃµµÇÏÁö¸¸, A ¾²·¹µå°¡ ÁøÀÔÇØ ÀÖÀ¸¹Ç·Î ÀÓ°è ¿µ¿ª ¹Û¿¡¼­ ´ë±âÇÑ´Ù.
  4. A ¾²·¹µå°¡ count °ªÀ» Àаí
  5. Ä«¿îÆÃ ¿¬»êÀ» ÇØ¼­
  6. °ªÀ» ÀúÀåÇÑ´Ù. count = 1
  7. A ¾²·¹µå°¡ ÀÓ°è ¿µ¿ª¿¡¼­ ºüÁ®³ª¿Â´Ù.
  8. ºñ·Î¼­ B ¾²·¹µå°¡ ÀÓ°è ¿µ¿ª¿¡ ÁøÀÔÇØ¼­
  9. count °ª 1À» Àо Ä«¿îÆÃ ¿¬»êÀ» Çϰí ÀúÀåÇÑ´Ù. count = 2
Á¦´ë·Î Ä«¿îÆÃ ¿¬»êÀÌ µÇ´Â°É È®ÀÎÇÒ ¼ö ÀÖ´Ù.

4 Mutex

¹ÂÅØ½º´Â pthread¿¡¼­ Á¦°øÇÏ´Â µ¿±âÈ­ ¸ÅÄ¿´ÏÁòÀ¸·Î °øÀ¯ ÀÚ¿ø °ø°£¿¡ ´ëÇÑ Á¢±Ù ½Ã°£ Á¦¾î·Î µ¿±âÈ­¸¦ ´Þ¼ºÇÑ´Ù. ±âº»ÀûÀÎ ¸ÅÄ¿´ÏÁòÀº ¼¼¸¶Æ÷¾î¿Í ºñ½ÁÇÏ´Ù. ƯÈ÷ POSIX ¼¼¸¶Æ÷¾î¿Í ºñ½ÁÇϸç, µ¿±âÈ­ ¸ÅÄ¿´ÏÁòÀ¸·Î ¹ÂÅØ½º ´ë½Å ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. µ¿±âÈ­ ¸ÅÄ¿´ÏÁòÀÇ ÇÙ½ÉÀº »óÈ£ ¹èÁ¦·Î ´ÙÀ½°ú °°ÀÌ ´Þ¼º ÇÑ´Ù.

global int v = 1; 
lock() 
{ 
    while(1) 
    { 
        if (v==1) 
            break; 
    } 
    v = 0; 
    return 1; 
} 
 
unlock() 
{ 
    v = 1; 
    break; 
} 
 
¾îµð±îÁö³ª ¸ÅÄ¿´ÏÁò »óÀ¸·Î ±×·¸´Ù´Â ¾ê±â°í, ¼¼¸¶Æ÷¾î¿Í ¸¶Âù°¡Áö·Î busy wait »óÅ¿¡ ³õÀÌÁö ¾ÊÀ½À» º¸ÀåÇÑ´Ù.

»óÈ£ ¹èÁ¦´Â Àá±Ý Çü½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù. ¾²·¹µå´Â Àá±Ý v¸¦ ¾ò¾î¾ß ÀÓ°è ¿µ¿ª¿¡ ÁøÀÔÇÒ ¼ö ÀÖ´Ù. ÀÓ°è ¿µ¿ªÀ» ºüÁ®³ª¿À¸é Àá±ÝÀ» µÇµ¹·Á Á༭ ´Ù¸¥ ¾²·¹µå°¡ Àá±ÝÀ» ¾òÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù.

¹ÂÅØ½º ¸ÞÄ¿´ÏÁòÀÇ Æ¯Â¡À» Á¤¸®Çß´Ù.

  • Atomicity - mutex Àá±Ý(lock)´Â ÃÖ¼Ò´ÜÀ§ ¿¬Àû(atomic operation) À¸·Î ÀÛµ¿ÇÑ´Ù. À̸»ÀÇ ¶æÀº ÇϳªÀÇ ¾²·¹µå°¡ mutex ¸¦ ÀÌ¿ëÇØ¼­ Àá±ÝÀ» ½ÃµµÇÏ´Â µµÁß¿¡ ´Ù¸¥ ¾²·¹µå°¡ mutex Àá±ÝÀ» ÇÒ¼ö¾øµµ·Ï ÇØÁشٴ ¶æÀÌ´Ù. Çѹø¿¡ ÇϳªÀÇ mutex Àá±ÝÀ» Çϵµ·Ï º¸ÁõÇØÁØ´Ù.
  • Singularity - ¸¸¾à ½º·¹µå°¡ mutex Àá±ÝÀ» Çß´Ù¸é, Àá±ÝÀ» ÇÑ ¾²·¹µå°¡ mutex Àá±ÝÀ» ÇØÁ¦ Çϱâ Àü±îÁö ´Ù¸¥ ¾î¶°ÇÑ ¾²·¹µåµµ mutex Àá±ÝÀ» ÇÒ¼ö ¾øµµ·Ï º¸ÁõÇØÁØ´Ù.
  • Non-Busy Wait - ¹Ù»Û´ë±â »óÅ¿¡ ³õÀÌÁö ¾Ê´Â´Ù´Â ¶æÀ¸·Î, ÇϳªÀÇ ¾²·¹µå°¡ mutex Àá±ÝÀ» ½ÃµµÇϴµ¥ ÀÌ¹Ì ´Ù¸¥ ¾²·¹µå°¡ mutex Àá±ÝÀ» »ç¿ëÇϰí ÀÖ´Ù¸é À̾²·¹µå´Â ´Ù¸¥ ¾²·¹µå°¡ ¶ôÀ» ÇØÁ¦ÇϱâÀü±îÁö ÇØ´ç ÁöÁ¡¿¡ ¸Ó¹°·¯ ÀÖÀ¸¸ç À̵¿¾ÈÀº ¾î¶°ÇÑ CPU ÀÚ¿øµµ ¼ÒºñÇÏÁö ¾Ê´Â´Ù (À̸¦Å׸é sleep).

5 ¹ÂÅØ½º ¸¸µé±â

¹ÂÅØ½º¸¦ »ý¼ºÇϱâ À§Çؼ­ ¿ì¸®´Â ¸ÕÀú, ¹ÂÅØ½ºÁ¤º¸¸¦ ÀúÀåÇϱâ À§ÇÑ Å¸ÀÔÀÎ pthread_mutex_t ¸¦ ¼±¾ðÇØÁÖ°í À̰ÍÀ» ÃʱâÈ­ ÇØÁÖ¾î¾ß ÇÑ´Ù. ¼±¾ð°ú ÃʱâÈ­ÀÇ °¡Àå°£´ÜÇÑ ¹æ¹ýÀº PTHREAD_MUTEX_INITIALIZER »ó¼ö¸¦ ÇÒ´çÇÏ´Â °ÍÀ¸·Î ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇÒ¼ö ÀÖ´Ù.
pthread_mutex_t a_mutex = PTHREAD_MUTEX_INITIALIZER; 
 

ȤÀº pthread_mutex_init(3)ÇÔ¼ö·Î ¹ÂÅØ½º¸¦ »ý¼ºÇÒ ¼öµµ ÀÖ´Ù.
#include <pthread.h> 
 
int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutex_attr *attr); 
 
  • mutex : ¹ÂÅØ½º °´Ã¼
  • attr : ¹ÂÅØ½º »ý¼º Ư¼º, NULL ÀÌ¸é ±âº» Ư¼ºÀ» °¡Áø´Ù.

6 ¹ÂÅØ½º Àá±Ý, Àá±ÝÇØÁ¦, Á¦°Å

¹ÂÅØ½º Àá±ÝÀ» À§ÇÑ ÇÔ¼ö·Î´Â pthread_mutex_lock() ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ÇØ´ç ¹ÂÅØ½º¿¡ ´ëÇØ¼­ Àá±ÝÀ» ½ÃµµÇϴµ¥, ¸¸¾à Àá±×·Á´Â ¹ÂÅØ½º°¡ ´Ù¸¥ ¾²·¹µå¿¡ ÀÇÇØ¼­ ÀÌ¹Ì Àá°ÜÀÖ´Ù¸é, Àá±ÝÀ» ¾òÀ»¼ö ÀÖÀ»¶§±îÁö - ÀÌ¹Ì Àá±Ù ´Ù¸¥ ¾²·¹µå°¡ ¹ÂÅØ½ºÀÇ Àá±ÝÀ» ÇØÁ¦ÇÒ¶§±îÁö - ºÀ¼â(ºí·°)µÇ°Ô µÈ´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ ¹ÂÅØ½º Àá±ÝÀ» ¾ò±â À§ÇÑ Áö¿øÇÔ¼öµéÀÌ´Ù.
int pthread_mutex_lock(pthread_mutex_t *mutex); 
int pthread_mutex_trylock(pthread_mutex_t *mutex); 
int pthread_mutex_destory(pthread_mutex_t *mutex); 
 

pthread_mutex_trylock() ¸¦ »ç¿ëÇϸé Àá±ÝÀ» ¾òÀ»¼ö ¾øÀ»°æ¿ì ÇØ´ç Äڵ忡¼­ ºí·°µÇÁö ¾Ê°í ¹Ù·Î ¿¡·¯Äڵ带 µ¹·ÁÁØ´Ù. Áï pthread_mutex_lock ÀÇ ºñºÀ¼â ¹öÁ¯À̶ó°í »ý°¢ÇÏ¸é µÈ´Ù.

¹ÂÅØ½º Àá±ÝÀ» ¾òÀºÈÄ ÇØ´ç ¿µ¿ª¿¡¼­ÀÇ ÀÛ¾÷À» ¸¶Ä£ÈÄ Àá±ÝÀ» ÇØÁ¦Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. »ç¿ëµÇ´Â ÇÔ¼ö´Â pthread_mutex_unlock(3) À̸ç ÇÔ¼ö¿øÇüÀº ´ÙÀ½°ú °°´Ù.
int pthread_mutex_unlock(pthread_mutex_t *mutex); 
 
´ÙÀ½Àº ¾²·¹µå°£ °øÀ¯µÇ´Â ÀÚ¿øÀ» À§Çؼ­ Àá±ÝÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â °£´ÜÇÑ ¿¹Á¦´Ù.

¿¹Á¦: mutex_lock.c
#include <stdio.h>   
#include <unistd.h>   
#include <pthread.h>   
  
int ncount;    // ¾²·¹µå°£ °øÀ¯µÇ´Â ÀÚ¿ø  
pthread_mutex_t  mutex = PTHREAD_MUTEX_INITIALIZER; // ¾²·¹µå ÃʱâÈ­  
  
void* do_loop(void *data)  
{  
    int i;  
    for (i = 0; i < 10; i++)  
    {  
        pthread_mutex_lock(&mutex); // Àá±ÝÀ» »ý¼ºÇÑ´Ù.  
        printf("loop1 : %d\n", ncount);  
        ncount ++;  
        if(i == 10) return; 
        pthread_mutex_unlock(&mutex); // Àá±ÝÀ» ÇØÁ¦ÇÑ´Ù.  
        sleep(1);  
    }  
}  
  
void* do_loop2(void *data)  
{  
    int i;  
  
    // Àá±ÝÀ» ¾òÀ¸·Á°í ÇÏÁö¸¸ do_loop ¿¡¼­ ÀÌ¹Ì Àá±ÝÀ»   
    // ¾ò¾úÀ½À¸·Î Àá±ÝÀÌ ÇØÁ¦µÉ¶§±îÁö ±â´Ù¸°´Ù.    
    for (i = 0; i < 10; i++)  
    {  
        pthread_mutex_lock(&mutex); // Àá±ÝÀ» »ý¼ºÇÑ´Ù.  
        printf("loop2 : %d\n", ncount);  
        ncount ++;  
        pthread_mutex_unlock(&mutex); // Àá±ÝÀ» ÇØÁ¦ÇÑ´Ù.  
        sleep(2);  
    }  
}      
  
int main()  
{  
    int       thr_id;  
    pthread_t p_thread[2];  
    int status;  
    int a = 1;  
  
    ncount = 0;  
    thr_id = pthread_create(&p_thread[0], NULL, do_loop, (void *)&a);  
    sleep(1);  
    thr_id = pthread_create(&p_thread[1], NULL, do_loop2, (void *)&a);  
  
    pthread_join(p_thread[0], (void *) &status);  
    pthread_join(p_thread[1], (void *) &status);  
  
    status = pthread_mutex_destroy(&mutex);  
    printf("code  =  %d", status);  
    printf("programing is end");  
    return 0;  
}  
 
À§ÀÇ Äڵ带 ¿ì¼± mutex Àá±ÝÀ» ÇÏÁö ¾ÊÀºÃ¼ ÄÄÆÄÀÏÈÄ ½ÇÇàÇØº¸ÀÚ. °£´ÜÇÏ°Ô pthread_mutext_lock ¿Í pthread_mutex_unlock ºÎ¸¸ ÁÖ¼®Ã³¸®ÇÏ¸é µÈ´Ù. ±×·¯¸é do_loop2 ¿Í do_loop °¡ ÀÏÁ¤ÇÑ °£°ÝÀ» µÎ°í ncount ÀÚ¿ø¿¡ Á¢±ÙÇÏ´Â °ÍÀ» º¼¼ö ÀÖÀ»°ÍÀÌ´Ù. ±×·¯³ª ¿ì¸®´Â do_loop °¡ ncount ÀÚ¿øÀ» Á¢±ÙÇϰí Àִµ¿¾È ´Ù¸¥ ¾²·¹µå°¡ Á¢±ÙÇÏÁö ¾Ê±â¸¦ ¿øÇÒ¶§°¡ ÀÖÀ»°ÍÀÌ´Ù. ÀÌ·²¶§ ¹ÂÅØ½º Àá±ÝÀ» »ç¿ëÇÏ¸é µÈ´Ù.

À§ÀÇ Äڵ忡¼­ ¹ÂÅØ½º Àá±Ý ºÎºÐÀÇ ÁÖ¼®À» Ç®°í ´Ù½Ã ÄÄÆÄÀÏÇØ¼­ ½ÇÇà½ÃÄѺ¸¸é, do_loop ¾²·¹µå°¡ ncount Áõ°¡ ÀÛ¾÷À» ¸ðµÎ ¸¶Ä¥¶§±îÁö do_loop2 ¾²·¹µå´Â ÇØ´ç ¿µ¿ª¿¡¼­ ºí·°µÊÀ» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù. ÀÌ·±½ÄÀ¸·Î ÇϳªÀÇ ¾²·¹µå°¡ ƯÁ¤ÀÚ¿ø¿¡ Á¢±ÙÇÒ¶§ ´Ù¸¥ ¾²·¹µå°¡ Á¢±ÙÇÏÁö ¸øÇϵµ·Ï(Çѹø¿¡ ÇϳªÀÇ ¾²·¹µå¸¸ ÇØ´ç ÀÚ¿ø¿¡ Á¢±ÙÇÒ¼ö ÀÖµµ·Ï) Á¦¾îÇÒ¼ö ÀÖ´Ù.

ÄÄÆÄÀÏ ¹æ¹ýÀº gcc -o mutex_lock mutex_lock.c -lpthread ÀÌ´Ù

´õÀÌ»ó ¹ÂÅØ½º¸¦ »ç¿ëÇÒÀÏÀÌ ¾ø´Ù¸é pthread_mutex_destory ¸¦ ÀÌ¿ëÇØ¼­ ¹ÂÅØ½º ÀÚ¿øÀ» Á¦°Å(free) Çϵµ·Ï ÇÑ´Ù. ¸¸ÀÏ ¹ÂÅØ½ºÀÚ¿øÀ» »ç¿ëÇÏ´Â ¾²·¹µå°¡ Çϳª¶óµµ Á¸ÀçÇÑ´Ù¸é ¿¡·¯ÄÚµå(EBUSY)¸¦ ¸®ÅÏÇÑ´Ù. ±×·¯¹Ç·Î ¸ðµç ¾²·¹µåÀÇ ¹ÂÅØ½º¿¡ ´ëÇØ¼­ pthread_mutex_unlock À» ÀÌ¿ëÇØ¼­ Àá°ÜÁ®¾ß¸¸ ¹ÂÅØ½º Á¦°Å°¡ ¼º°øÇÒ¼ö ÀÖ´Ù. ¼º°øÇÒ°æ¿ì 0À» ³Ñ°ÜÁØ´Ù.

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