_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 .ㅠ_ㅠ)
이 글은 스프링노트에서 작성되었습니다.
'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 |

이올린에 북마크하기