해결된 질문
작성
·
37
0
안녕하세요.
Semaphore 예제를 따라해보다가 2가지 궁금점이 있어 질문드립니다.
10개의 Thread를 생성한 후에 만들어진 Thread Handle을 닫지 않고 있는데, 그래도 괜찮은 것인가요?
세마포어를 생성하는 API나, WFSO API에 형태가 여러가지 있는 것 같습니다. (CreateSemaphoreW나, WaitForSingleObjectEX 등) 이 API 간에 차이는 무엇인가요?
답변 2
0
인프런 AI 답변을 참고하시면 되겠습니다. 그리고 부족한 부분을 조금 보완하겠습니다.
Win32 API 이름 끝에 A, W가 붙는 경우는 MBCS인 경우과 Unicode인 경우를 나타냅니다. 즉, 문자열 처리시 char[]인지 아니면 wchar_t[] 인지에 따라 다르게 구현된 것입니다. 기능적으로는 차이가 없습니다.
그리고 Ex가 붙는 경우는 기존 API 대비 기능이 추가된 것들입니다. 쉽게 생각해 '확장형'으로 이해하시면 되겠습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
hyehyeon kim님, 세마포어 관련 질문 감사드립니다. 세마포어와 관련된 API 사용에 대해 이해를 돕기 위해 몇 가지 설명을 추가드리겠습니다.
Thread Handle을 닫지 않는 경우:
CloseHandle
을 통해 명시적으로 닫아주는 것이 좋습니다.API 간의 차이점:
CreateSemaphoreW
는 유니코드 버전의 세마포어 생성 함수이며, CreateSemaphoreA
는 비유니코드(ANSI) 버전입니다. 대부분의 최신 Windows 환경에서는 유니코드 함수를 사용하는 것이 권장됩니다.WaitForSingleObject
와 WaitForSingleObjectEx
는 둘 다 특정 객체가 이벤트 객체로 전환될 때까지 대기하는 함수입니다. WaitForSingleObjectEx
는 대기 중에 경고 가능 상태를 설정하는 옵션이 추가되어 좀 더 세밀한 제어가 가능합니다.드디어 관련된 다른 사용자의 질문을 찾아보았습니다.
- “임계영역 기반 동기화 질문입니다.”에서 쓰레드 핸들을 닫는 것에 대한 설명이 포함되어 있습니다.
- “WaitForSingleObject 함수 질문”에서는 WaitForSingleObject
에 대한 설명을 볼 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.