해결된 질문
작성
·
272
0
안녕하세요. 시스템 프로그래밍 수업을 듣고 있는 수강생입니다.
"임계영역 기반 동기화" 에서 질문이 있습니다.
해당 예제 코드는 ThreadFunc1과 ThreadFunc2가 경쟁적으로 SetString, GetString 하는 것을 CRITICAL_SECTION 으로 해결해보려는 예제로 인지했습니다.
그런데 main함수 초반에 hHandle에 ThreadFunc1쓰레드를 실행(_beginthreadex)하고 ::CloseHandle(hThread);를 했습니다. 저는 그래서 ThreadFunc1쓰레드가 종료되었다 생각하여 ThreadFunc1을 출력할 일이 없을거라 생각했습니다.
하지만 실행결과는 ThreadFunc1과 ThreadFunc2이 랜덤으로 5번 출력되는데 왜 ThreadFunc1이 출력되는지 궁금합니다. 혹시 제가 간과한 개념이 있을까요??
답변 1
1
스레드의 핸들을 닫는 것이 해당 스레드의 종료를 의미하지 않습니다. 이 부분에서 이해의 오류가 발생했습니다. 스레드 핸들은 제어를 위해 필요한 것입니다. 새로 생성해 실행하는 스레드를 제어할 이유가 없다면 즉시 핸들을 닫는 것이 일반적입니다. 참고하시기 바랍니다.