• 카테고리

    질문 & 답변
  • 세부 분야

    데스크톱 앱 개발

  • 해결 여부

    해결됨

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

23.08.16 20:05 작성 조회수 227

0

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

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

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

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

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

답변 1

답변을 작성해보세요.

1

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

채널톡 아이콘