Contents:
- 1 °³¿ä
- 2 °ü·Ã¼Àû
- 3 Áֿ丵ũ
- 4 Ä¿³Î ¿ÀºêÁ§Æ®(Kernel Object)
- 4.1 Á¤ÀÇ
- 4.2 Ä¿³Î ¿ÀºêÁ§Æ®ÀÇ Æ¯Â¡
- 5 À©µµ¿ìÁî ±â¹ÝÀÇ Thread
- 6 Signaled & Non-Signaled Ä¿³Î ¿ÀºêÁ§Æ®
- 6.1 WaitForSingleObject
- 6.2 WaitForMultipleObjects
- 7 ¿ë¾î Á¤¸®
- 8 ´Ù¿î·Îµå
- 9 °ü·Ã¸µÅ©
4 Ä¿³Î ¿ÀºêÁ§Æ®(Kernel Object) #
Ä¿³Î¿¡ ÀÇÇÏ¿© »ý¼ºµÇ°í °ü¸®µÇ´Â ¸®¼Ò½º¿¡ ´ëÇÏ¿© »ý¼ºµÇ´Â µ¥ÀÌŸ ºí·Ï À» Ä¿³Î ¿ÀºêÁ§Æ® ¶ó°í ÇÑ´Ù.
Ä¿³Î ¿ÀºêÁ§Æ®´Â °¢ ¸®¼Ò½º¿¡ µû¶ó ´Ù¸¥ ±¸Á¶·Î µÇ¾î ÀÖ´Ù.
Ä¿³Î ¿ÀºêÁ§Æ®´Â Ä¿³Î¿¡ ÀÇÇØ »ý¼ºµÈ ¸®¼Ò½º¸¦ °ü¸®Çϱâ À§ÇÏ¿© »ý¼ºµÇ´Â µ¥ÀÌŸ ºí·ÏÀ» ¸»ÇÑ´Ù.
4.2 Ä¿³Î ¿ÀºêÁ§Æ®ÀÇ Æ¯Â¡ #
- Ä¿³Î ¿ÀºêÁ§Æ®´Â Ä¿³ÎÀÌ ¼ÒÀ¯ÇÑ´Ù.
- Ä¿³Î ¿ÀºêÁ§Æ®´Â ÇÁ·Î¼¼½º¿¡ ÀÇÇØ¼ »ý¼ºµÇÁö¸¸ Ä¿³ÎÀÌ ¼ÒÀ¯Çϰí ÀÖ´Ù.
- Ä¿³Î ¿ÀºêÁ§Æ®´Â ÇÁ·Î¼¼½º°¡ Á¾·áÇÏ´õ¶óµµ ¹Ýµå½Ã ¼Ò¸êµÇÁö ¾Ê´Â´Ù.
- Ä¿³Î ¿ÀºêÁ§Æ®´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ¼ »ç¿ëµÉ ¼öµµ ÀÖÀ¸¸ç Ä¿³Î ¿ÀºêÁ§Æ® ³»¿¡ Ä«¿îÅͰ¡ 0 ÀÌ µÇ¸é Ä¿³Î¿¡ ÀÇÇÏ¿© ¼Ò¸êµÈ´Ù.
- Ä¿³Î ¿ÀºêÁ§Æ®´Â ½ÇÁ¦·Î Ä¿³Î¿¡ ÀÇÇØ¼ »ý¼ºµÇ°í °ü¸®µÈ´Ù.
- ÇÁ·Î¼¼½ºÀÇ ¿ä±¸¿¡ ÀÇÇÏ¿© Ä¿³ÎÀÌ »ý¼ºÇÑ´Ù.
5 À©µµ¿ìÁî ±â¹ÝÀÇ Thread #
- À©µµ¿ìÁîÀÇ Thread °³³ä
- ÇÁ·Î±×·¥ÀÇ ½ÇÇà´ÜÀ§·Î ÇÁ·Î¼¼½º ³»ºÎ¿¡¼ ½ÇÇàµÈ´Ù.
- À¯´Ð½º °è¿¿¡¼´Â ÇÁ·Î¼¼½º°¡ ½ÇÇà´ÜÀ§°¡ µÇÁö¸¸ À©µµ¿ìÁî¿¡¼´Â ÇÁ·Î¼¼½º´Â ¾²·¹µå¸¦ ´ã°í ÀÖ´Â ÀúÀå¼Ò¶ó°í ÇÒ ¼ö ÀÖ´Ù.
- ¾²·¹µåÀÇ »ý¼º°ú Á¾·á
- »ý¼º : CreateThread()
- Run-Time Library ´Â Multithreaded library ¸¦ ¸µÅ©ÇØ¾ß ÇÑ´Ù.
- Á¾·á :
- ¾²·¹µå°¡ ½ÃÀ۵Ǵ ÇÔ¼ö¿¡¼ ¸®ÅÏÇÒ °æ¿ì ( ÀϹÝÀûÀÎ ¹æ¹ý )
- ExitThread() : ¸®¼Ò½º ÇØÁ¦ °úÁ¤ ÇÊ¿ä ( ȣȯ¼º ¹®Á¦ )
- ¾ÈÀüÇÑ ¾²·¹µå C/C++ ¶óÀ̺귯¸® »ç¿ëÇϱâ
- ¹æ¹ý : _beginthreadex()
- ¸ÖƼ ¾²·¹µå ±â¹ÝÀÇ C/C++ ¶óÀ̺귯¸®¿¡ Æ÷ÇÔµÈ ÇÔ¼ö·Î ¶óÀ̺귯¸® ¼³Á¤ÀÌ À߸øµÈ °æ¿ì '''Unresolved external symbol" À̶ó´Â ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
6 Signaled & Non-Signaled Ä¿³Î ¿ÀºêÁ§Æ® #
6.1 WaitForSingleObject #
ÇϳªÀÇ Ä¿³Î ¿ÀºêÁ§Æ® Çڵ鿡 ´ëÇÏ¿© Signaled »óŸ¦ ±â´Ù¸°´Ù.
- dwMilliseconds - ŸÀӾƿô ¼³Á¤, INFINITE ¸¦ Àü´ÞÇÒ °æ¿ì ¹«ÇÑ´ë±â ÇÑ´Ù.
- ¸®Åϰª
- Signaled »óŰ¡ µÈ °æ¿ì : WAIT_OBJECT_0
- ŸÀӾƿôÀÌ µÈ °æ¿ì : WAIT_TIMEOUT
- Signaled »óÅ¿¡¼ ¸®ÅÏµÈ °æ¿ì - Ä¿³Î ¿ÀºêÁ§Æ®´Â Non-Signaled »óÅ·Π¹Ù²ï´Ù.
Âü°í>
- Auto-reset ¸ðµå Ä¿³Î ¿ÀºêÁ§Æ® : WaitForSingleObject ÇÔ¼ö¿¡¼ ¸®ÅÏÇÒ °æ¿ì Non-Signaled ·Î ¹Ù²ï´Ù.
- Manual-reset ¸ðµå Ä¿³Î ¿ÀºêÁ§Æ® : ¼öµ¿À¸·Î Non-Signaled ¸ðµå·Î ¹Ù²ã¾ß ÇÑ´Ù.
6.2 WaitForMultipleObjects #
´Ù¼öÀÇ Ä¿³Î ¿ÀºêÁ§Æ® Çڵ鿡 ´ëÇÏ¿© Signaled »óŸ¦ ±â´Ù¸°´Ù.
- lpHandle - Ä¿³Î ¿ÀºêÁ§Æ® ÇÚµéÀÇ ¹è¿
- bWaitAll
- TRUE ·Î ¼³Á¤ - lpHandle ·Î Àü´ÞµÈ ¸ðµç ÇÚµéÀÇ Ä¿³Î ¿ÀºêÁ§Æ®°¡ Signaled »óŰ¡ µÇ¾î¾ß ÇÑ´Ù.
- FALSE ·Î ¼³Á¤ - ÇϳªÀÇ Ä¿³Î ¿ÀºêÁ§Æ®¶óµµ Signaled »óŰ¡ µÇ¸é ¸®ÅÏÇÑ´Ù. ¸®Åϰª¿¡¼ WAIT_OBJECT_0 ¸¦ »©¸é ¿ÀºêÁ§Æ® ÇÚµé ¹è¿¿¡¼ Signaled µÈ Ä¿³Î ¿ÀºêÁ§Æ® À妽º°¡ µÈ´Ù.
7 ¿ë¾î Á¤¸® #
- pseudo handle
GetCurrentProcess() ¿Í GetCurrentThread() ÇÔ¼ö·Î ¾òÀ» ¼ö ÀÖÀ¸¸ç À̵é ÇÔ¼ö¸¦ È£ÃâÇÑ ÇÁ·Î¼¼½º³ª ¾²·¹µå¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÚµéÀÌ´Ù. ¶ÇÇÑ »ó¼ÓÀ̳ª ´Ù¸¥ ÇÁ·Î¼¼½º·Î Àü´ÞÇÏ¿© »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç DuplicateHandle() ÇÔ¼öÀ» ÀÌ¿ëÇÏ¿© ½ÇÁ¦ ÇÚµé·Î º¹»çÇÑ ÈÄ Àü´ÞÇØ¾ß ÇÑ´Ù. ±×¸®°í CloseHandle() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ÇÚµéÀ» ´ÝÀ» ¼ö ¾ø´Ù.
8 ´Ù¿î·Îµå #