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

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

HK님의 프로필 이미지

작성한 질문수

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

세마포어 예제에 대한 질문이 있습니다.

해결된 질문

작성

·

37

0

안녕하세요.

Semaphore 예제를 따라해보다가 2가지 궁금점이 있어 질문드립니다.

 

  1. 10개의 Thread를 생성한 후에 만들어진 Thread Handle을 닫지 않고 있는데, 그래도 괜찮은 것인가요?

  2. 세마포어를 생성하는 API나, WFSO API에 형태가 여러가지 있는 것 같습니다. (CreateSemaphoreW나, WaitForSingleObjectEX 등) 이 API 간에 차이는 무엇인가요?

답변 2

0

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

인프런 AI 답변을 참고하시면 되겠습니다. 그리고 부족한 부분을 조금 보완하겠습니다.

Win32 API 이름 끝에 A, W가 붙는 경우는 MBCS인 경우과 Unicode인 경우를 나타냅니다. 즉, 문자열 처리시 char[]인지 아니면 wchar_t[] 인지에 따라 다르게 구현된 것입니다. 기능적으로는 차이가 없습니다.

그리고 Ex가 붙는 경우는 기존 API 대비 기능이 추가된 것들입니다. 쉽게 생각해 '확장형'으로 이해하시면 되겠습니다. 참고하시기 바랍니다. 😄

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

hyehyeon kim님, 세마포어 관련 질문 감사드립니다. 세마포어와 관련된 API 사용에 대해 이해를 돕기 위해 몇 가지 설명을 추가드리겠습니다.

  1. Thread Handle을 닫지 않는 경우:

    • 일반적으로 Thread를 생성한 후, 이를 제어하거나 모니터링하려면 Thread Handle이 필요하게 됩니다. 하지만, 생성된 Thread가 제어할 필요가 없거나, 실행이 끝나고 나면 시스템에서 해제되도록 할 경우는 가비지 컬렉션에 의해서 자동으로 정리되기도 합니다. 하지만 메모리 누수를 방지하고, 자원의 효율적인 사용을 위해서는 CloseHandle을 통해 명시적으로 닫아주는 것이 좋습니다.
  2. API 간의 차이점:

    • CreateSemaphoreW는 유니코드 버전의 세마포어 생성 함수이며, CreateSemaphoreA는 비유니코드(ANSI) 버전입니다. 대부분의 최신 Windows 환경에서는 유니코드 함수를 사용하는 것이 권장됩니다.
    • WaitForSingleObjectWaitForSingleObjectEx는 둘 다 특정 객체가 이벤트 객체로 전환될 때까지 대기하는 함수입니다. WaitForSingleObjectEx는 대기 중에 경고 가능 상태를 설정하는 옵션이 추가되어 좀 더 세밀한 제어가 가능합니다.

드디어 관련된 다른 사용자의 질문을 찾아보았습니다.
- “임계영역 기반 동기화 질문입니다.”에서 쓰레드 핸들을 닫는 것에 대한 설명이 포함되어 있습니다.
- “WaitForSingleObject 함수 질문”에서는 WaitForSingleObject에 대한 설명을 볼 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

HK님의 프로필 이미지

작성한 질문수

질문하기