[ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): guest (guest) <211.58.193.93> ³¯ Â¥ (Date): 2001³â 4¿ù 11ÀÏ ¼ö¿äÀÏ ¿ÀÀü 01½Ã 20ºÐ 18ÃÊ Á¦ ¸ñ(Title): [Q]Thread-safe functions? pthread¿Í °ü·ÃµÈ Áú¹®ÀÔ´Ï´Ù. main thread¿¡¼­ pthread_create()¸¦ ÀÌ¿ëÇÏ¿© ¸¸µç »õ·Î¿î thread¿¡°Ô main threadÀÇ argument¸¦ ³Ñ±æ¶§ sync¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀ¸·Î malloc°ú free¸¦ »ç¿ëÇÏ¸é µÈ´Ù°í Çϴ±¸¿ä.( pointer·Î argument passingÀ» ÇÕ´Ï´Ù. ) _______________________________________________________________________ int *connfd; ..... for( ; ; ) { connfd = ( int * )malloc( sizeof( int ) ); *connfd = Accept( listenfd, ( SA * )&cliaddr, &addrlen ); Pthread_create( NULL, NULL, &doit, connfd ); } static void * doit( void *arg ) { int connfd; connfd = *( ( int * )arg ); free(arg); Pthread_detach( pthread_self() ); ... } -------------------------------------------------------------------------- ( ¼Ò½º º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ ½ºÆ¼ºì½º Ã¥ÀÔ´Ï´Ù ) ÀÌ°ÍÀÌ ¾î¶»°Ô sync¹®Á¦¸¦ ÇØ°áÇÏ´ÂÁö ÀÌÇØ°¡ °¡Áö ¾Ê½À´Ï´Ù. Ã¥¿¡¼­´Â free, malloc À̶ó´Â ³ðµéÀÌ thread-safe functionÀ̶ó°í Çϴµ¥ ÀÌ°ÍÀº ¶Ç ¹«½¼ À̾߱âÀÎÁö Àß ¸ð¸£°Ú´õ±º¿ä. ¹«½¼ À̾߱âÁÒ? [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): terzeron (the cowboy) ³¯ Â¥ (Date): 2001³â 4¿ù 11ÀÏ ¼ö¿äÀÏ ¿ÀÈÄ 06½Ã 41ºÐ 16ÃÊ Á¦ ¸ñ(Title): Re: [Q]Thread-safe functions? Á¦ »ý°¢¿¡´Â Stevens¾¾ÀÇ Àǵµ°¡ Á¤È®È÷ ¹ºÁö´Â ¸ð¸£°ÚÁö¸¸, thread¶ó´Â °Ô ¿ø·¡ Àü¿ªº¯¼ö³ª staticº¯¼öµîÀ» °øÀ¯Çϱ⠶§¹®¿¡ ÀǵµÇÏÁö ¾Ê¾Ò´ø º¯¼ö °øÀ¯¸¦ ÇÇÇϱâ À§Çؼ­ mallocÀ» ½á¼­ ¾²·¹µå¸¶´Ù ´Ù¸¥ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ°Ô ÇÏ´Â °Í °°½À´Ï´Ù. mallocÀº thread-safe functionÀÌ¶ó¼­ ¾²·¹µå¸¶´Ù ´Ù¸¥ ¸Þ¸ð¸®¸¦ Àß ÇÒ´çÇØÁÝ´Ï´Ù. ¿ø·¡ ¸Þ¸ð¸® ÇÒ´çÀ̶ó´Â °Ô ÇÁ·Î¼¼½º¿¡°Ô ÇÒ´çµÇ¾î ÀÖ´Â ÁÖ¼Ò°ø°£¿¡¼­ ÀϺθ¦ °¡Á®´Ù ¾²´Â °Çµ¥ Àç¼ö°¡ ¾ø¾î¼­ ¾²·¹µå°¡ °°Àº ¿µ¿ªÀ» ÇÒ´ç¹Þ´Â´Ù¸é ¹®Á¦°¡ »ý±â°ÚÁÒ. ±×·¡¼­ malloc¸¶³É ½Ã½ºÅÛ ¶óÀ̺귯¸®¿¡¼­ ¾²·¹µå³¢¸® Ãæµ¹ÇÏÁö ¾Êµµ·Ï ¹Ì¸® 󸮸¦ ÇØÁÖ´Â-µ¿½Ã¿¡ ¼öÇàµÇÁö ¾Êµµ·Ï ÇØÁÖ´Â- ÇÔ¼öµéÀÌ ÀÖ½À´Ï´Ù. ÀÌ·± ÇÔ¼öµéÀ» thread-safe functionÀ̶ó°í ºÎ¸£°í ÀÌ·± ÇÔ¼öµéÀ» ¸ð¾Æ³õÀº ¶óÀ̺귯¸®¸¦ reentrant library¶ó°í ºÎ¸£ÁÒ. /usr/lib/libc_r.a°¡ ¹Ù·Î ÀÌ°Ì´Ï´Ù. libc.a¿¡µµ ÀÖ´Â ÇÔ¼öµéÀÌ ¸¹°ÚÁÒ. ¾î¶² ÇÔ¼öµéÀÌ Á¤ÀǵǾî ÀÖ´ÂÁö ±Ã±ÝÇϽøé nmÀ¸·Î ±îº¸½Ã¸é µÉ °Å±¸¿ä. ´Ù½Ã Á¤¸®Çغ¸¸é, thread ¸¸µé¾î¼­ ¾î¶² ÇÔ¼ö¸¦ ½ÇÇà½ÃÅ°·Á°í Çϴµ¥ ÀÌ ³ðÀÇ ÇÔ¼ö¿¡°Ô ¾Æ¹« º¯¼ö³ª Àü´ÞÇØÁÖ´Ù°¡´Â ¾î¶² Àç¼ö¾ø´Â »óȲÀÌ ¹ß»ýÇؼ­(°øÀ¯º¯¼ö³ª º¯¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ´Â »óȲ) º¯¼ö°¡ corrupt µÇÁö ¾Êµµ·Ï mallocÀ¸·Î º¸ÀåÇØÁÖÀÚ´Â ³»¿ëÀÎ °Í °°´Ù´Â °ÅÁÒ. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): wshan (Å©·Î´Ï) ³¯ Â¥ (Date): 2001³â 4¿ù 11ÀÏ ¼ö¿äÀÏ ¿ÀÈÄ 08½Ã 30ºÐ 30ÃÊ Á¦ ¸ñ(Title): Re: [Q]Thread-safe functions? ÇѸ¶µð »çÁ·À» ºÙÀ̸é thread-safeÇÏ°í reentrant´Â ¾à°£ ´Ù¸¥ ÀǹÌÀÔ´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): testors (Å×½ºÅ佺) ³¯ Â¥ (Date): 2001³â 4¿ù 11ÀÏ ¼ö¿äÀÏ ¿ÀÈÄ 10½Ã 31ºÐ 08ÃÊ Á¦ ¸ñ(Title): Re: [Q]Thread-safe functions? malloc°ú free¸¦ »ç¿ëÇÑ ÀÌÀ¯´Â, ³Ñ°ÜÁØ argument°¡ ÀÚµ¿ º¯¼öÀÏ°æ¿ì, ¾²·¹µå°¡ »ý¼ºµÇ¾î ±×°ÍÀ» ÂüÁ¶Çϱâ Àü¿¡ ¾²·¹µå¸¦ »ý¼ºÇÑ functionÀÌ Á¾·áÇØ, ÀÚµ¿º¯¼ö°¡ »ç¶óÁö°Ô µÇ¸é ¹®Á¦°¡ »ý±â¹Ç·Î.. ±×°É ¾Æ¿¹ heap ¿¡´Ù°¡ ÀâÀº°ÍÀÔ´Ï´Ù. ¾²·¹µå¸¦ main() ¿¡¼­ ¸¸µç´Ù¸é ±×³É ÀÚµ¿º¯¼ö·Î Àâ¾Æµµ »ó°ü ¾ø°Ú½À´Ï´Ù. static À¸·Î ÀâÀ¸¸é ±¦ÂúÀ»°Í °°Áö¸¸, ÇØ´ç functionÀÌ ¿©·¯¹ø ºÒ¸±°æ¿ì ¹®Á¦°¡ »ý±â°ÚÁÒ. Çؼ­ heap¿¡ Àâ´Â°Ô Á¦ÀÏ ¾ÈÀüÇÏ´Ù´Â °ÅÁÒ. ±×·±µ¥ ¾î´À Ã¥ÀÌÁÒ? [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): wshan (Å©·Î´Ï) ³¯ Â¥ (Date): 2001³â 4¿ù 12ÀÏ ¸ñ¿äÀÏ ¿ÀÈÄ 08½Ã 50ºÐ 26ÃÊ Á¦ ¸ñ(Title): Re: [Q]Thread-safe functions? thread safe¶õ ±× code¸¦ ¿©·¯ thread°¡ ¼öÇàµÇ¾îµµ ´Ù¸¥ thread¿¡ ¿µÇâÀ» ÁÖÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. reentrant¶õ ÇϳªÀÇ ¾²·¹µå°Ç ¿©·¯ ¾²·¹µåµéÀÌ ¼öÇàµÇ¾îµµ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¿¹¸¦ µé¾îº¸¸é, XYZ ÇÔ¼ö¿¡¼­ signalÀÌ ¹ß»ýÇÏ¿© signal handlingÇÏ´Â ºÎºÐÀ¸·Î °¬´Âµ¥, ¿©±â¼­ XYZ¸¦ È£ÃâÇÏ´Â °æ¿ì¿¡ thread-safeÇÏ´õ¶óµµ reentrantÇÏÁö ¾ÊÀ¸¸é ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÁÒ. Á»´õ ÇÁ·Î±×·¡¹ÖÇÒ ¶§ °í·ÁÇØ Áà¾ß µÇ´Â ºÎºÐÀÔ´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): dalgong (´Þ°ø¾ÆÀú¾¾) ³¯ Â¥ (Date): 2001³â 4¿ù 13ÀÏ ±Ý¿äÀÏ ¿ÀÀü 10½Ã 45ºÐ 23ÃÊ Á¦ ¸ñ(Title): Re: [Q]Thread-safe functions? re-entrant¶õ°Ç functionÀÇ ¼öÇàÀÌ call....returnÀ̶ó°í ÇÒ¶§, callÇÑÈÄ returnÇÏÁö ¾ÊÀº »óÅÂÀÇ ÇÔ¼ö°¡ ¿©·¯¹ø ÀÏ¾î ³¯¼ö ÀÖ´Â °æ¿ì¿¡ ¾Æ¹« ÀÌ»ó ¾øÀÌ µ¹¾Æ°¡´Â Äڵ带 ¸»ÇÏÁÒ. ¹Ý¸é thread-safe´Â ¸»±×´ë·Î ¿©·¯ thread°¡ µ¿½Ã¿¡ ¼öÇàÇصµ ¾Æ¹« ÀÌ»óÀÌ ¾ø´Â °æ¿ì¸¦ ¸»ÇÕ´Ï´Ù. re-entrant°¡ ÀϹÝÀûÀ¸·Î ´õ ¾î·Æ°ÚÁÒ? libc¿¡ ´ëÇؼ­ mt-safeÇÏ°Ô ¸¸µå´Â ÀÛ¾÷Àº ¹¹ mutex¸¦ ºÙÀÎ wrapper¸¦ ¸¸µé¸é ±×¸¸ÀÌ°ÚÁö¸¸, re-entrantÇÏ°Ô ¸¸µå´Â °Ç algorithmÀÚü¸¦ ¹Ù²ã¾ß ÇÒ °æ¿ì°¡ ÀÖ°ÚÁÒ.