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

bbangnaya님의 프로필 이미지
bbangnaya

작성한 질문수

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

임계영역 기반 동기화

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

해결된 질문

작성

·

272

0

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

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

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

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

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

답변 1

1

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

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

bbangnaya님의 프로필 이미지
bbangnaya

작성한 질문수

질문하기