À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á |
---|
Á¦¸ñ | [MFC] Thread Etc... 1998/07/29 (17:52) |
À̸§ | swindler |
¹øÈ£ | 51 |
Á¶È¸ | 431 |
º»¹® |
1. Thread Blocking WaitForSingleObject()ÇÔ¼ö È£ÃâÀº ½º·¹µå ºí·ÏÅ·ÀÇ ÇÑ ¿¹·Î ÀÛ¾÷ÀÚ ½º·¹µå°¡ À̺¥Æ®ÀÇ ½Ã±×³Î »óÅ°¡ µÉ ¶§±îÁö ´Ü¼øÈ÷ ½ÇÇàÀ» ÀϽà ÁßÁöÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ ½º·¹µå ºí·ÏÅ·Àº ¹ß»ýÇÒ ¼ö ÀÖ´Ù. Sleep()ÇÔ¼ö¸¦ È£ÃâÇÏ´Â µîÀÇ ¿¹°¡ ÀÖ´Ù. ºí·ÏÅ· È£ÃâÀº ¸ÞÀÎ ½º·¹µå¿¡ Æ÷ÇÔ½ÃÅ°Áö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. µð½ºÅ© I/O°¡ ÇÊ¿äÇÑ ÀÛ¾÷ÀÇ °æ¿ì ÀÛ¾÷ÀÚ ½º·¹µå¿¡ ³Ö°í ¸ÞÀÎ ½º·¹µå¿Í µ¿±âȸ¦ Çϴ°ÍÀÌ ÁÁ´Ù. ½º·¹µå¸¦ ºÒ¸íÈ®ÇÏ°Ô ºí·ÏÅ·ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¹«ÇÑÁ¤ ºí·ÏÅ·µÇ´Â °æ¿ì ¸ÞÀÎ ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¸é ½º·¹µåµµ Á¾·á´Â µÇÁö¸¸, ¸Þ¸ð¸® ´©ÃâÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¸ÞÀÎ ½º·¹µå¿¡¼ TerminateThread()¸¦ È£ÃâÇÏ¿© ½º·¹µå¸¦ °Á¦ Á¾·áÇÒ ¼ö ÀÖÁö¸¸, ¸Þ¸ð¸® ´©ÃâÀº ¿©ÀüÈ÷ ÀϾÙ. 2. Critical Section ÀÓ°è ¼½¼Ç(°øÀ¯ÇÑ µ¥ÀÌŸÀÇ ¹èÂ÷Àû ¾×¼¼½º¸¦ ¿ä±¸ÇÏ´Â ÄÚµåÀÇ ¼½¼Çµé) ÇÚµéÀ» wrapÇÏ´Â CCriticalSection Class°¡ ÀÖ´Ù. Lock(), UnLock()ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. EnterCriticalSection(), LeaveCriticalSection(), DeleteCriticalSection()À» È£ÃâÇÏ°Ô µÈ´Ù. CCriticalSection g_cs; // ´Ù¸¥ ½º·¹µåÀÇ Á¢±ÙÀ» À§ÇØ Àü¿ª°´Ã¼ int count; void func() { g_cs.Lock(); count++; g_cs.UnLock(); Lock()¿¡ ÀÇÇØ ´Ù¸¥ ½º·¹µå°¡ ºí·ÏÅ·µÇ¸ç, ÁßøµÈ ÀÓ°è ¼½¼ÇÀÇ °æ¿ì¿¡µµ À©µµ¿ì°¡ Áßø ¼øÀ§¿¡ µû¶ó ÃßÀûÇϹǷΠ¹®Á¦°¡ ¾ø´Ù. Àü¿ª °´Ã¼ÀÇ °æ¿ì¿¡´Â Á¤»óÀûÀ¸·Î ÀÛµ¿ÇÏÁö¸¸, °´Ã¼ Æ÷ÀÎÅ͸¦ °øÀ¯ÇÑ´Ù¸é ÀÏ·ÃÀÇ ¶Ç ´Ù¸¥ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù.½º·¹µå´Â ´Ù¸¥ ½º·¹µå°¡ °´Ã¼¸¦ »èÁ¦Çß´ÂÁöÀÇ ¿©ºÎ¸¦ ÆÇ´ÜÇØ¾ß ÇϹǷΠ°´Ã¼ Æ÷ÀÎÅÍÀÇ ¾×¼¼½º¸¦ µ¿±âȽÃÄÑ¾ß ÇÏ´Â °ÍÀÌ´Ù. 3. Mutex, Semaphore ÀÓ°è ¼½¼ÇÀº ´ÜÀÏ ÇÁ·Î¼¼½º ³»¿¡¼¸¸ °¡´ÉÇϹǷΠ¹ÂÅؽº³ª ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. <À̺¥Æ®> ½º·¹µå°£ÀÇ µ¿±âÈ¿¡ ³Î¸® »ç¿ëµÇ´Â ¹æ¹ýÀ¸·Î ÇϳªÀÇ ½º·¹µå°¡ ´Ù¸¥ ½º·¹µå¿¡°Ô ƯÁ¤ À̺¥Æ®°¡ ¹ß»ýÇßÀ½À» ¾Ë¸°´Ù. ´Ù¸¥ ÇÁ·Î¼¼½º³»ÀÇ ½º·¹µå°£¿¡µµ °¡´ÉÇÏ´Ù. <ÀÓ°è¼½¼Ç> °øÀ¯ µ¥ÀÌÅͳª ¸®¼Ò½º(¸Þ¸ð¸®, ÆÄÀÏ)¿¡ ´ëÇÑ Á¢±ÙÀ» ÇϳªÀÇ ½º·¹µå·Î Á¦ÇÑÇÑ´Ù. µ¿ÀÏ ÇÁ·Î¼¼½º ³»¿¡¼¸¸ °¡´ÉÇÏ´Ù. <¹ÂÅؽº> Å©¸®Æ¼Äà ¼½¼Ç°ú µ¿ÀÏ ±â´ÉÀ» ÇÏÁö¸¸ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ¼ÓÇÑ ½º·¹µå¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. <¼¼¸¶Æ÷¾î> ¹ÂÅؽº¿Í À¯»çÇÏÁö¸¸ µ¿½Ã¿¡ ¼öÇàµÉ ¼ö ÀÖ´Â ½º·¹µå¸¦ ¿©·¯°³·Î Á¦ÇÑÇÑ´Ù. Á¦ÇÑµÈ ¼öÀÇ ½º·¹µå°¡ °øÀ¯ µ¥ÀÌÅͳª ¸®¼Ò½º¿¡ Á¢±ÙÇÑ´Ù. 4. »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ½º·¹µå »ç¿ëÀÚ¿¡ ÀÇÇØ ¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÖƼ ÀνºÅϽº¸¦ ½ÇÇàÇϵµ·Ï Çã¿ëÇÏ¸é¼ »ý¼ºµÈ ÀνºÅϽºµéÀÌ ¸Þ¸ð¸®¸¦ °øÀ¯Çϵµ·Ï ÇÏ·Á´Â °æ¿ì ´ÜÀÏ ÇÁ·Î¼¼½º¸¦ ±¸¼ºÇÏ¿© ¿©·¯°³ÀÇ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ½º·¹µå¸¦ ½ÇÇà½ÃÅ´À¸·Î½á »ç¿ëÀÚ·Î ÇÏ¿©±Ý ¸¶Ä¡ °¢ ½º·¹µå°¡ º°°³ÀÇ ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃÅ°´Â °Íó·³ »ý°¢Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. (À©µµ¿ìÀÇ Å½»ö±â°¡ ÀÌ·± ÇöÅÂÀÎ °Í °°´Ù.Ž»ö±â¸¦ 3°³ ½ÇÇàÇϸé, ÇÁ·Î¼¼½ºÀÇ ¼ö´Â ¿©ÀüÈ÷ 1°³À̸ç, ½º·¹µå °³¼ö¸¸ Áõ°¡µÈ´Ù.) µÎ¹ø° ÀÌÈÄÀÇ ½º·¹µå¸¦ Ãâ¹ß½Ãų ¶§¿¡´Â ù¹ø° ÇÁ·Î¼¼½º¸¦ ½Ã±×³Î »óÅ·Π¸¸µé¾î »õ·Î¿î ½º·¹µå°¡ Ãâ¹ßµÇµµ·Ï ÇÑ ´ÙÀ½ Á¾·áÇÑ´Ù.µÎ¹ø° ÇÁ·Î¼¼½º´Â FindWindow()¸¦ È£ÃâÇϰųª °øÀ¯ µ¥ÀÌŸ ¼½¼ÇÀ» ¼±¾ðÇÏ´Â ¹æ¹ýÀ¸·Î ù¹ø° ÇÁ·Î¼¼½º¸¦ ãÀ» ¼ö ÀÖ´Ù. |