인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

bbangnaya님의 프로필 이미지

작성한 질문수

Windows 시스템 프로그래밍 - 기본

임계영역 기반 동기화

임계영역 기반 동기화 질문입니다.

해결된 질문

작성

·

332

0

안녕하세요. 시스템 프로그래밍 수업을 듣고 있는 수강생입니다.

"임계영역 기반 동기화" 에서 질문이 있습니다.

해당 예제 코드는 ThreadFunc1과 ThreadFunc2가 경쟁적으로 SetString, GetString 하는 것을 CRITICAL_SECTION 으로 해결해보려는 예제로 인지했습니다.

그런데 main함수 초반에 hHandle에 ThreadFunc1쓰레드를 실행(_beginthreadex)하고 ::CloseHandle(hThread);를 했습니다. 저는 그래서 ThreadFunc1쓰레드가 종료되었다 생각하여 ThreadFunc1을 출력할 일이 없을거라 생각했습니다.

하지만 실행결과는 ThreadFunc1과 ThreadFunc2이 랜덤으로 5번 출력되는데 왜 ThreadFunc1이 출력되는지 궁금합니다. 혹시 제가 간과한 개념이 있을까요??

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

스레드의 핸들을 닫는 것이 해당 스레드의 종료를 의미하지 않습니다. 이 부분에서 이해의 오류가 발생했습니다. 스레드 핸들은 제어를 위해 필요한 것입니다. 새로 생성해 실행하는 스레드를 제어할 이유가 없다면 즉시 핸들을 닫는 것이 일반적입니다. 참고하시기 바랍니다.