ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Docbook ¿ø¹®
1절. ¼Ò°³±×µ¿¾È Pthread(1) °ú Pthread(2) ¸¦ ÅëÇØ¼ pthread ¿¡ ´ëÇÑ ±âº»ÀûÀÎ °³¿ä¿Í »ç¿ë¹æ¹ýÀ» ¾Ë¾Æ º¸¾Ò´Ù. À̹ø¹®¼´Â pthread ¿¡ ´ëÇÑ Á»´õ ±íÀÌÀÖ´Â ³»¿ë¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ÀÌ ¹®¼¿¡¼´Â ±×µ¿¾ÈÀÇ Pthread ¹®¼¿¡¼ ´Ù·çÁö ¸øÇÑ ¸î°¡Áö À̽´µé°ú ´ÙÁß ¾²·¹µå ÇÁ·Î±×·¡¹Ö½Ã ÇÊ¿ä·ÎÇÏ´Â Condition variables ¸¦ ÅëÇÑ Á»´õ Á¤±³ÇÑ ¾²·¹µå°£ µ¿±âÈ ¹æ¹ý¿¡ ´ëÇØ¼ ´Ù·ç°Ô µÈ´Ù. 2절. ¾²·¹µå Á¾·ù2.1절. User Space °ú Kernel Space ¾²·¹µåPthread ´Â Posix Thread ·Î Posix ¿¡¼ Ç¥ÁØÀ¸·Î ±Ô°ÝÈÇÑ ¾²·¹µå ¶óÀ̺귯¸®À̸ç, User Space ¿¡¼ ÀÛµ¿ÇÏ´Â ¾²·¹µå ¶óÀ̺귯¸®ÀÌ´Ù. Áï ¾²·¹µå °ü¸®¸¦ À§Çؼ Kernel ÀÌ °ü¿©¸¦ÇÏÁö ¾Ê°í ¾²·¹µå °ü·Ã ¶óÀ̺귯¸®¿¡¼ ´ëºÎºÐÀÇ ¾²·¹µå °ü¸®¸¦ ó¸®ÇÏ°Ô µÈ´Ù. Kernel ÀÌ Á÷Á¢ ¾²·¹µå¸¦ °ü¸®ÇÏ´Â ¹æ½ÄÀ» Kernel Space ¾²·¹µå ¶ó°í Çϴµ¥, User Space ¾²·¹µå º¸´Ù ºñ¿ëÀÌ Á»´õ ¸¹ÀÌ µå´Â °ü°è·Î ÃÖ±Ù¿¡´Â User Space ¶óÀ̺귯¸®¸¦ Á»´õ ¼±È£ÇÏ´Â ÆíÀÌ´Ù. Kernel Space ÀÌ User Space ¾²·¹µå º¸´Ù ºñ¿ëÀÌ ´õ ¸¹ÀÌ µç´Ù´Âµ¥ ÀǾÆÇØ ÇÒ¼öµµ ÀÖÀ»°ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î »ý°¢ÇßÀ»¶§ Kernel Àº Á»´õ ½Ã½ºÅÛ¿¡ °¡±î¿ì¹Ç·Î Á»´õ ºñ¿ëÀÌ Àû°í ºü¸¦°Í À̶ó°í »ý°¢ÇÒ¼ö ÀÖÁö¸¸ ½ÇÀº ±×·¸Áö ¾Ê´Ù. º¸Åë ÀÀ¿ëÇÁ·Î±×·¥Àº 2°¡Áö ·¹º§¿¡¼ ÀÛµ¿ÇÏ°Ô µÈ´Ù. Çϳª´Â Kernel Space ¸ðµå ÀÌ°í ´Ù¸¥ Çϳª´Â User Space ¸ðµåÀÌ´Ù. ÀÌ·¸°Ô 2°¡Áö ¸ðµå·Î ³ª´©´Â ÀÌÀ¯´Â ÀϹÝÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½Ã½ºÅÛ¿¡ Á÷Á¢ Á¢±ÙÇÏ´Â ÀÏÀ» ¸·±â À§ÇÔÀ¸·Î, ÀÏ¹Ý ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ½Ã½ºÅÛ¿¡ Á¢±ÙÇϱâ À§Çؼ´Â System Call À» ºÒ·¯¼ Kernel ¿¡°Ô ½Ã½ºÅÛÀÚ¿øÀ» »ç¿ëÇÒ°ÍÀ» ¿äûÇÏ´Â ¹æ½ÄÀ¸·Î °£Á¢ Á¢±ÙÇØ¾ß ÇÑ´Ù. À̶§ Ä¿³ÎÀº º¸È£¸ðµå »óÅ¿¡¼ System Call À» ó¸®ÇØ¾ß ÇϹǷΠ¿©·¯°¡Áö ¿¬»êÀ» °¡Áö°Ô µÇµÈ´Ù. ÃÖÁ¾ÀûÀ¸·Î User ¸ðµå¿¡¼ Kernel ¸ðµå·Î ÀüȯÇϴµ¥ µå´Âºñ¿ë, º¸È£¸ðµå¸¦ À§ÇÑ ¿©·¯°¡Áö ¿¬»êÀ» Çϴµ¥ µå´Â ºñ¿ëµî 3°¡ÁöÀÇ ºñ¿ëÀ» ¼ÒºñÇÏ°Ô µÈ´Ù. ¹Ý¸é User Level ¾²·¹µå´Â ´ëºÎºÐÀÇ ÀÛ¾÷À» system call À» »ç¿ëÇÏÁö ¾Ê°í »ç¿ëÀÚ¶óÀ̺귯¸® ¿¡¼ ´ëºÎºÐ ó¸®ÇϹǷΠKernel Level ¾²·¹µå°¡ °¡Áö´Â ºñ¿ëÀ» ÁÙÀϼö ÀÖ´Ù. ´ÜÁ¡À̶ó¸é Kernel Level ¾²·¹µå°¡ °¢ ¾²·¹µå¸¦ º¸È£ÇØÁÖ´Â ¹Ý¸é À¯Àú·¹º§ ¾²·¹µå´Â º¸È£¸¦ ¹ÞÀ»¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. ±×·¯¹Ç·Î À¯Àú·¹º§¾²·¹µå »ç¿ë½Ã¿¡´Â °¢ ¾²·¹µå¸¦ º¸È£Çϱâ À§ÇÑ ¿©·¯°¡Áö µ¿±âÈ ÀåÄ¡µîÀ» »ç¿ëÇØ¾ß Çϸç, À̰ÍÀº ¶§¶§·Î ¼¼¹ÐÇÏ°í º¹ÀâÇÑ ÄÚµù ±â¹ýÀ» ¿ä±¸ÇÑ´Ù. ¾î¶µç ÇöÀç Unix ÂÊÀº Pthread ¸¦ Ç¥ÁØÀ¸·Î °¡Á®°¡´Â°Í °°´Ù. 2.1.1절. User Space¾²·¹µå¾²·¹µå¸¦ À¯ÁöÇϱâ À§Çؼ´Â ¿©·¯°¡Áö Á¤º¸¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ·¯ÇÑ Á¤º¸´Â "ÇÁ·Î±×·¥ ÄÚµå", Data, Stack, File I/O, Signal Å×ÀÌºí µî Å©°Ô 5°¡ÁöÀÌ´Ù. User Space ¾²·¹µå´Â ÀÌ·¯ÇÑ Á¤º¸¸¦ Ä¿³Î¿¡¼ °ü¸®Çϵµ·Ï ÇÏÁö ¾Ê°í ¾²·¹µå ¶óÀ̺귯¸®¿¡¼ Á÷Á¢ ó¸®ÇÏ°Ô µÈ´Ù. ¶ÇÇÑ °¢ ¾²·¹µå°£ Çù·ÂÀÌ °¡´ÉÇϵµ·Ï switch ±â´ÉÀ» Á¦°øÇϴµ¥, Ä¿³Î¾²·¹µåº¸´Ù ÀϹÝÀûÀ¸·Î ºü¸¥ switch ±â´ÉÀ» Á¦°øÇÑ´Ù. ´ÜÁ¡Àº SMPs(Symmetric MultiProcessor system)ÀÇ ÀåÁ¡µéÀ» ÀÌ¿ëÇÒ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. Áï dual ȤÀº quad ÀÇ cpu¸¦ »ç¿ëÇϰí ÀÖ´Â ½Ã½ºÅÛÀ̶ó ÇÒÁö¶óµµ, User Space ¾²·¹µå·Î´Â ÁøÁ¤ÇÑ ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ¿ÀÁ÷ ÇϳªÀÇ CPU¿¡¼¸¸ ÀÛµ¿ÇÒ¼ö ÀÖÀ»»ÓÀÌ´Ù. ±×·¯¹Ç·Î ¼³»ç CPU°¡ 2°³ ȤÀº 4°³ ÀÖ´Ù°í ÇÏ´õ¶óµµ, ¼öÇà¼ÓµµÂ÷ÀÌ´Â ±×¸® Å©Áö ¾Ê°Ô µÈ´Ù. ¶ÇÇÑ ÇϳªÀÇ ¾²·¹µå¿¡¼ I/O ºÀ¼â°¡ ÀϾ°Ô µÇ¸é ´Ù¸¥ ¸ðµç ¾²·¹µå±îÁö ºÀ¼âµÇ°Ô µÈ´Ù. ¹°·Ð ÀÌ·¯ÇÑ ¹®Á¦µéÀ» À§ÇÑ ÇØ¹ý¿ª½Ã Á¸ÀçÇÑ´Ù. I/O ºÀ¼â¸¦ ¾Æ¿¹ ¶óÀ̺귯¸® Â÷¿ø¿¡¼ ÇØ°áÇÒ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ¾²·¹µå ¶óÀ̺귯¸®µµ ÀÖÀ¸¸ç, I/O ÀÛ¾÷À» ºñºÀ¼â ¸ðµå·Î ÀÛ¾÷ÇÔÀ¸·Î½á ºÀ¼â¸¦ ¸·À»¼öµµ ÀÖ´Ù. ±×¸®°í ¸î¸îÀÇ SMPs ´Â User Space ¾²·¹µå·Îµµ ¸ðµç SMP ÀÚ¿øÀ» ÀÌ¿ëÇÒ¼ö ÀÖµµ·Ï ¹æ¹ýÀ» Á¦°øÇØ Áֱ⵵ ÇÑ´Ù. 2.1.2절. Kernel Space ¾²·¹µåÄ¿³Î¿¡¼ Á÷Á¢ ¾²·¹µå¸¦ °ü¸®Çϸç, Ä¿³ÎÀÚü¿¡¼ ¾²·¹µå Á¤º¸¸¦ °¡Áø´Ù. ¶ÇÇÑ °¢ ÇÁ·Î¼¼½º °£ÀÇ ½ºÄÉÁ쿪½Ã Ä¿³Î¿¡¼ ¸Ã´Â´Ù. À̰æ¿ì I/O ºÀ¼â°°Àº ¹®Á¦´Â ½Å°æ¾²Áö ¾Ê¾Æµµ µÇ¸ç, ¶ÇÇÑ SMPs ÀÚ¿øÀ» Á¦´ë·Î Ȱ¿ëÇÒ¼ö ÀÖ´Ù´Â ÀåÁ¡À» °¡Áø´Ù. 3절. Pthread ¿¡¼ÀÇ ¼¼¹ÐÇÑ µ¿±âȿ츮´Â ÀÌÀüÀÇ Pthread(2) ¹®¼¿¡¼ mutex Àá±ÝÀ» ÀÌ¿ëÇÑ µ¥ÀÌŸ µ¿±âÈ¿¡ ´ëÇØ¼ ÀÌ¹Ì ¾Ë¾Æº¸¾Ò´Ù. ±×·¯³ª mutex ´Â ¾îµð±îÁö³ª Àá±ÝÀ» À§ÇÑ °ÍÀ¸·Î µ¿±âȽÃų¼ö ÀÖ´Â ¹üÀ§´Â Á¼Àº ¹üÀ§·Î ÇÑÁ¤µÇ¸ç, mutex ¸¸ °¡Áö°í´Â ¼¼¹ÐÇÑ ¼öÁØ¿¡¼ÀÇ µ¿±âÈ´Â ¾î·Æ´Ù. ±×·¡¼ mutex ¿Í ´õºÒ¾î ´Ù¸¥ ¾²·¹µå µµ±¸¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. À̹øÀå¿¡¼´Â Condition variables (Á¶°Çº¯¼ö) ¿Í mutex ¸¦ ÀÌ¿ëÇÑ µ¥ÀÌÅÍ µ¿±âÈ¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 3.1절. Á¶°Çº¯¼ö¹ÂÅØ½º°¡ Àá±Ý¿¡ ÀÇÇØ¼ ¼Ò±ØÀûÀÎ µ¿±âȸ¦ Á¦°øÇÑ´Ù¸é, Á¶°Çº¯¼ö´Â "½Ã±×³Î ¹ß»ý"°ú "½Ã±×³Î¿¡ ´ëÇÑ ±â´Ù¸²" À» ÅëÇÑ Á»´õ Àû±ØÀûÀÎ µ¿±âÈ ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎÀ» ±â´Ù¸®±â À§Çؼ pthread_cond_wait() ¿Í pthread_cond_timedwait() 2°³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ÀÌ ÇÔ¼öµéÀº pthread_cond_signal()¿¡ ÀÇÇØ¼ ¹ß»ýµÇ´Â ½Ã±×³ÎÀ» ±â´Ù¸®°í ÀÖ´Ù°¡. ½Ã±×³ÎÀÌ µµÂøÇÏ¸é ±â´Ù¸²À» ¸ØÃß°í ´ÙÀ½ ·çƾÀ» ½ÇÇàÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎÀÇ Àü´ÞÀº "Á¶°Çº¯¼ö" ¸¦ ÅëÇØ¼ ÀÌ·ç¾îÁö°Ô µÈ´Ù. ¾Æ·¡´Â ÀÌ·¯ÇÑ ¼ø¼¸¦ °£·«ÇÏ°Ô Á¤¸®ÇÑ °ÍÀÌ´Ù(½´µµÄÚµåÇü½Ä).
3.1.1절. Á¶°Çº¯¼ö »ý¼º¹× ÃʱâÈÁ¶°Çº¯¼ö´Â pthread_cont_t ÀÇ Å¸ÀÔÀ¸·Î ¼±¾ðµÇ¾î ÀÖ´Ù. pthread_cond_t ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.
3.1.2절. Á¶°Çº¯¼ö¿¡ ½ÅÈ£ º¸³»±â¿ì¸®´Â Á¶°Çº¯¼ö¿¡ ½ÅÈ£¸¦ º¸³¿À¸·Î½á, Á¶°Çº¯¼ö¸¦ (½ÅÈ£¸¦)±â´Ù¸®´Â ´Ù¸¥ ¾²·¹µå¸¦ ±ú¿ï¼ö ÀÖ°Ô µÈ´Ù. º¸ÅëÀº ÀÌ·¯ÇÑ ½ÅÈ£¸¦ º¸³»¼ ±ú¿ì°íÀÚ ÇÏ´Â ¾²·¹µå°¡ ÇϳªÀϼöµµ ÀÖÁö¸¸, µ¿½Ã¿¡ ¿©·¯°³ÀÇ ¾²·¹µå¸¦ ±ú¿ö¾ßÇÒ Çʿ䵵 ÀÖÀ»°ÍÀÌ´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ ½Ã±×³ÎÀ» º¸³»´Â ÇÔ¼öµéÀÌ´Ù.
¼º°øÀûÀ¸·Î ½Ã±×³ÎÀÌ Àü´ÞµÇ¸é 0ÀÌ ¸®ÅϵȴÙ. 3.1.3절. Á¶°Çº¯¼ö¸¦ ÅëÇÑ ½ÅÈ£ ±â´Ù¸®±â½ÅÈ£¸¦ º¸³»´Â ¾²·¹µå°¡ ÀÖ´Ù¸é, ÀÌ ½ÅÈ£¸¦ ¹Þ±â À§ÇØ ±â´Ù¸®´Â ¾²·¹µåµµ ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù. ½ÅÈ£¸¦ ¹Þ±â À§Çؼ´Â pthread_cond_wait()¿Í pthread_cond_timewait() µÎ°³ÀÇ ÇÔ¼ö°¡ »ç¿ëµÈ´Ù. À̵ΰ³ÀÇ ÇÔ¼ö´Â ½ÅÈ£°¡ Àü´ÞµÉ¶§±îÁö ±â´Ù¸®°Ô µÈ´Ù.
pthread_cond_wait() ¿Í pthread_cond_timedwait() ÀÇ ´Ù¸¥Á¡Àº timeout À» ±â´Ù¸®´ÂÁö¿¡ µû¶ó¼ ±¸º°µÈ´Ù. pthread_cond_timedwait ´Â ±â´Ù¸²ÀÇ ½Ã°£À» ¼³Á¤ÇÏ¿©¼ ÀÏÁ¤ÇÑ ½Ã°£µ¿¾È ½Ã±×³ÎÀÌ µµÂøÇÏÁö ¾ÊÀ¸¸é ETIMEDOUT °ªÀ» ¸®ÅÏÇÑ´Ù. ¹Ý¸é pthread_cond_wait ´Â ½Ã±×³ÎÀÌ µµÂøÇÒ¶§±îÁö ¹«ÇÑÁ¤ ±â´Ù¸°´Ù. Áö±Ý±îÁöÀÇ ¼³¸íÇÑ ³»¿ëÀÇ ÀÌÇØ¸¦ µ½±â À§ÇØ °£´ÜÇÑ È帧µµ¸¦ ±×·Áº¸¾Ò´Ù. ¾Æ·¡ÀÇ È帧µµ´Â pthread_cond_wait()¸¦ »ç¿ëÇßÀ»°æ¿ì´Ù.
´ÙÀ½Àº pthread_cond_timedwait()¸¦ »ç¿ëÇßÀ»¶§ÀÇ È帧µµÀÌ´Ù. pthread_cond_wait()¿Í ºñ±³Çؼ ½Ã°£¼³Á¤À» À§ÇѺκÐÀÌ µé¾î°¡°í, ŸÀӾƿôÀÌ ¹ß»ýÇßÀ»¶§ ó¸®ÇÏ´Â ºÎºÐÀÌ µé¾î°¡´Â°É »©°í´Â ³ª¸ÓÁö ºÎºÐÀº µ¿ÀÏÇÏ´Ù.
3.1.4절. Á¶°Ç º¯¼ö ¾ø¾Ö±â(Destory)´õÀÌ»ó »ç¿ëÇÒ Çʿ䰡 ¾ø´Â Á¶°Çº¯¼ö´Â ¾ø¾ÖÁÖµµ·Ï ÇÏÀÚ. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ½Ã½ºÅÛÀÚ¿øÀÇ ³¶ºñ¸¦ ¸·À»¼ö ÀÖ´Ù. Á¶°Çº¯¼ö¸¦ ¾ø¾Ö±â À§Çؼ´Â pthread_cond_destroy() ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. Á¶°ßº¯¼ö¸¦ ¾ø¾Ö±â Àü¿¡ Á¶°Çº¯¼ö¸¦ »ç¿ëÇÏ´Â ¾²·¹µå°¡ ¾øÀ½À» È®ÀÎÇØ¾ß ÇÑ´Ù.
4절. Thread-Specific Data4.1절. ¾²·¹µå°£ Àü¿ªº¯¼ö »ç¿ëÀÇ ¹®Á¦Á¡ÀϹÝÀûÀÎ ´ÜÀÏ ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§, (ºñ·Ï ±ÇÀåÇÏÁö´Â ¾ÊÁö¸¸) Àü¿ªº¯¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì°¡ Á¾Á¾ ÀÖÀ»°ÍÀÌ´Ù. Àü¿ªº¯¼ö¸¦ ¾¸À¸·Î½á ±×·¸Áö ¾ÊÀ»¶§ º¸´Ù Äڵ带 ÈξÀ ½±°Ô ±â¼úÇÒ¼öµµ Àֱ⶧¹®ÀÌ´Ù. ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¥¿¡¼µµ ÀÌ·¯ÇÑ Àü¿ª º¯¼ö°¡ ÇÊ¿äÇÒ¶§°¡ ÀÖ´Ù. ±×·±µ¥ Àü¿ªº¯¼ö¸¦ ¾²´Âµ¥ ¾à°£ÀÇ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ÀÌÀ¯´Â ¸ðµç ¾²·¹µå°¡ Àü¿ªº¯¼ö¸¦ °øÀ¯ÇØ ¹ö¸®±â ¶§¹®¿¡, ¾²·¹µåº° Àü¿ªº¯¼ö¸¦ »ç¿ëÇÒ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. fork() ¸¦ ÀÌ¿ëÇÑ ¸ÖƼ ÇÁ·Î¼¼½º ¸ðµ¨¿¡¼´Â ÇÁ·Î¼¼½º°£ Àü¿ªº¯¼ö °øÀ¯°¡ µÇÁö ¾Ê±â ¶§¹®¿¡, °¢ ÇÁ·Î¼¼½º °³º°ÀûÀÎ Àü¿ªº¯¼ö¸¦ »ç¿ëÇÒ¼ö Àִ°Ͱú´Â ´ëÁ¶ÀûÀÌ´Ù. ±×·³ ¾î¶»°Ô ÇØ¾ßÁö ¾²·¹µå °³º°ÀûÀ¸·Î Àü¿ªº¯¼ö¸¦ »ç¿ëÇÏ°Ô ÇÒ¼ö ÀÖ´ÂÁö ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. 4.2절. Thread-Specific Data4.2.1절. Thread-Specific Data ÀÇ °³³äÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§ÇØ µîÀåÇѰÍÀÌ, Thread-Specific Data (ÀÌÇÏ TSD)ÀÌ´Ù. °°Àº Àü¿ªº¯¼ö°¡ ¼·Î ´Ù¸¥ ¸Þ¸ð¸® ¿µ¿ªÀ» °¡¸£Å°°Ô ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇϴµ¥, ´Ù¸¥ ¸Þ¸ð¸® ¿µ¿ªÀÇ ÁÖ¼Ò¸¦ °¡¸®Å°´Â °¢°¢ÀÇ ´Ù¸¥ key ¸¦ »ç¿ëÇÔÀ¸·Î½á, ¾²·¹µå°£ °³º°ÀûÀÎ Àü¿ªº¯¼ö¸¦ ¿¢¼¼½ºÇϰԲû ¸¸µé¾îÁØ´Ù. À̰ÍÀº °£´ÜÇÑ µ¥ÀÌŸº£À̽º ÇüÅÂÀÎ key-value °ü°è·Î ³ªÅ¸³¾¼ö Àִµ¥, °¢°¢ÀÇ key ¿¡ À̸§À» ºÎ¿©Çϰí ÀÌ key °¡ value ¸¦ °¡¸®Å²´Ù. ÀÌ value ´Â ¸Þ¸ð¸® ¿µ¿ªÀÌ µÉ°ÍÀÌ´Ù.
4.2.2절. TSD ºí·°ÀÇ ÇÒ´ç(»ý¼º)pthread_key_create() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ ¸ðµç ¾²·¹µå¿¡¼ È¿·ÂÀ» °¡Áö´Â »õ·Î¿î key¸¦ ÇÒ´ç¹ÞÀ»¼ö ÀÖ´Ù. ÃÖÃÊ¿¡ key ¸¦ ¸¸µé°Ô µÇ¸é ÀÌ key ´Â ±âº»ÀûÀ¸·Î NULLÀ» °¡¸£Å°°Ô µÈ´Ù. ³ªÁß¿¡ ¾²·¹µå´Â ÀÌ key °ªÀ» º¯°æÇÏ°Ô µÊÀ¸·Î½á ÀÚ½ÅÀÌ ¿øÇÏ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ÂüÁ¶ÇÒ¼ö ÀÖ°Ô µÈ´Ù. ´ÙÀ½Àº ÀÌ ÇÔ¼ö°¡ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö¿¡ ´ëÇÑ °£´ÜÇÑ ¿¹ÀÌ´Ù. pthread_key_t ´Â unsigned int ÇüÀÌ´Ù.
4.2.3절. TSD ºí·° ¿¡ ´ëÇÑ Accesskey ¸¦ ¸¸µé¾ú´Ù¸é ÀÌÁ¦ value ¿¡ ¿¢¼¼½º¸¦ ÇØ¾ß ÇÑ´Ù. ¿¢¼¼½º¸¦ À§Çؼ pthread_getspecific()¿Í pthread_setspecific()µÎ°³ÀÇ ÇÔ¼ö°¡ Á¦°øµÈ´Ù. ù¹øÂ° ÇÔ¼ö´Â key ¿¡ ´ëÇÑ value¸¦ °¡Á®¿À±â À§Çؼ »ç¿ëµÇ¸ç, µÎ¹øÂ° ÇÔ¼ö´Â key ¿¡ value ¸¦ ¼¼ÆÃÇϱâ À§Çؼ »ç¿ëµÈ´Ù. value ´Â (void *)ÇüÀ¸·Î ¿øÇÏ´Â ¾î¶² µ¥ÀÌŸ¶óµµ ³Ñ±æ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù. ´ÙÀ½Àº °£´ÜÇÑ »ç¿ë ¿¹ÀÌ´Ù.
4.2.4절. TSD ºí·° »èÁ¦´õÀÌ»ó »ç¿ëÇÒ Çʿ䰡 ¾ø´Â TSD ºí·°Àº pthread_key_delete()¸¦ ÀÌ¿ëÇØ¼ »èÁ¦ÇÑ´Ù. ÁÖÀÇ ÇÒ°ÍÀº À̰ÍÀº key ¸¦ »èÁ¦ÇÏ´Â °ÍÀÌÁö ½ÇÁ¦ µ¥ÀÌŸÀÇ ¸Þ¸ð¸®¸¦ »èÁ¦ÇÏÁö´Â ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. µ¥ÀÌŸ ¸Þ¸ð¸®ÀÇ »èÁ¦´Â pthread_key_create() ·Î key ¸¦ ¸¸µé¶§ ÁöÁ¤ÇÑ µ¥ÀÌŸ »èÁ¦ ÇÔ¼ö°¡ ÀÌ¿ëµÈ´Ù. ¸¸¾à µ¥ÀÌŸ »èÁ¦ ÇÔ¼ö°¡ NULL ÀÌ¿´´Ù¸é µ¥ÀÌŸ »èÁ¦´Â ÀϾÁö ¾ÊÀ»°ÍÀÌ´Ù.
5절. °á·ÐÁö±Ý±îÁö Pthread ¿¡ ´ëÇÑ ¸î°¡Áö À̽´µéÀ» »ìÆìº¸¾Ò´Âµ¥, ¿©ÀüÈ÷ ´Ù·çÁö ¸øÇÑ »çÇ×µéÀÌ ÀÖ½À´Ï´Ù. ±×¸®°í ½ÇÁ¦·Î ¾î¶»°Ô ÀÀ¿ëÀÌ °¡´ÉÇÑÁö¿¡ ´ëÇÑ ¹æÇâÁ¦½Ãµµ Á» ¹Ì¾àÇϱ¸¿ä. ÀÌ·¯ÇÑ ºÎÁ·ÇÑ Á¡µéÀº ³ªÁß¿¡ ´Ù·ç°Ô µÉ "´ÙÁß ¿¬°á ¼¹ö±¸¼º"ÀÇ ¾²·¹µå ÆíÀ» ´Ù·ç¸é¼ º¸°Çϵµ·Ï ÇϰڽÀ´Ï´Ù. ÀÌ ¹®¼µéÀº ÀÎÅͳݻóÀÇ ¿Â¶óÀι®¼µé°ú man ÆäÀÌÁöµéÀ» Âü°íÇØ¼ ¸¸µé¾úÀ¾´Ï´Ù. ±×¸®°í Á¦ ½º½º·Î ¾²·¹µå¿¡ ´ëÇØ¼ ±×¸® ±íÀº Áö½ÄÀ» °¡Áö°í ÀÖÁö ¾ÊÀ½À¸·Î, À߸øµÈ ³»¿ëÀÌ ÀÖÀ»¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ³»¿ëÀº °Ô½ÃÆÇ µî ¿¡´ñ±ÛÀ» ³²°ÜÁÖ½Ã¸é ¼öÁ¤Çϵµ·Ï ÇϰڽÀ´Ï´Ù. |
|
||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|