Tech & IT/프로그래밍

CreateThread 와 CRT함수들과의 위험성 여부

해피콧 2009. 12. 4. 16:26
'); }
'); }
1. CreateThread :
   Windows API함수이며 몇몇
   몇몇 crt 함수 (malloc(), fopen(), _open(), strtok(), ctime(), or localtime() 등등)가 만들어 놓은 static data 및 static buffer를 clean up하지 못함
   ExitThread에서 Thread에 생성된 static buffer를 clean up하지 못하므로 memory leak이 발생함(70~80byte)
   그런데 실제로 thread-safe 여부에 대해서는 언급은 없음
    thread 마다 고유의 static buffer를 생성하기 때문에 서로 침범을 하거나 critical section문제는 없을 것 같음
    CreateThread은 사용하지 않기를 절대적으로 권고하지만, 사용했다고 해서 thread관련 문제가 발생하지는 않음
    (MSDN에 MS VC++ 1.0부터 적용되는 내용이라는 걸 보아 문제는 안된다고 거의 말할 수 있음)

2. _beginthreadex : 
   _beginthread의 버그를 수정
   CRT함수들에 대해 문제없이 사용가능함 
   내부적으로는 CreateThread를 이용하여 구현되어 있음

3. AfxBeginThread
   MFC의 CWinThread클래스의 CreateThread를 호출
   CWinThread::CreateThread는 내부적으로 _binthreadex로 구현되어있으므로 CRT함수들에 대해 문제없이 사용가능


참고자료
Creating Threads
CreateThread Function
_beginthread, _beginthreadex 
AfxBeginThread
C Run-Time Libraries (CRT)

Description of using C Run-Time (CRT) functions 

and CreateThread () 

http://support.microsoft.com/default.aspx/kb/104641/en-us