_beginthread 의 또다른 문제

coder story/C/C++ 2008/11/03 15:54

안녕하세요 섭군입니다.

 

오늘 커뮤니티 사이트의 회원분이 올리신 소스를 디버깅 하던 중 _beginthread 의 재밌는 문제점을 발견했습니다.

 

_beginthread 로 생성한 스레드 핸들을 WaitForMultipleObejcts 로 대기하던 중 코드가 예상외로 돌아가는 부분을 발견했습니다.

 

WaitForMultipleObejcts 모둔 스레드 핸들이 시그널됐을경우 진행을 해야 하는 코드인데 대기중인 스레드가 종료되지 않았음에도 WaitForMultipleObjects 로 대기하던

 

스레드의 로직이 실행되었습니다.

 

일단 _beginthread 로 스레드 실행하던 부분을 _beginthreadex 로 변경했을시 문제가 발생하지 않았습니다.

 

그래서 MSDN 을 살펴보던중 재밌는 부분이 있더군요.

 

however, if the newly created thread exits too quickly, _beginthread might not return a valid handle

 

새로 생성된 스레드가 너무 빨리 종료되면 _beginthread 는 유효한 핸들을 반환하지 않을 수 도있다고 합니다.

 

위에 대한 테스트로 모든 스레들르 생성할 때까지 대기 하고 그 후 스레드를 시작시켰더니 _beginthread 로 생성했을때도 에러가 발생하지 않았습니다.

 

여러가지 문제로 버려지고있는 _beginthread 함수에게 또다른 단점이 발생했네요. (안녕 _beginthread .ㅠ_ㅠ)

이 글은 스프링노트에서 작성되었습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License

'coder story > C/C++' 카테고리의 다른 글

_beginthread 의 또다른 문제  (0) 2008/11/03
shared_ptr 과 weak_ptr  (0) 2008/09/18
operator() 연산자를 지원하는 케이스  (0) 2008/07/23
bool 에 대해서  (0) 2008/06/05
스레드 동기화(2) ... 커널 모드  (0) 2008/01/16
exit() 와 abort()  (0) 2008/01/16
tags :
Trackback 0 : Comment 0
◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [92] : NEXT ▶