CreateSemaphoreA 함수(winbase.h)
명명되거나 명명되지 않은 세마포 개체를 만들거나 엽니다.
개체에 대한 액세스 마스크를 지정하려면 CreateSemaphoreEx 함수를 사용합니다.
통사론
HANDLE CreateSemaphoreA(
[in, optional] LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
[in] LONG lInitialCount,
[in] LONG lMaximumCount,
[in, optional] LPCSTR lpName
);
매개 변수
[in, optional] lpSemaphoreAttributes
SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수가 NULL
구조체의 lpSecurityDescriptor 멤버는 새 세마포에 대한 보안 설명자를 지정합니다. 이 매개 변수가 NULL
[in] lInitialCount
세마포 개체의 초기 개수입니다. 이 값은 0보다 크거나 같아야 하며 lMaximumCount
[in] lMaximumCount
세마포 개체의 최대 개수입니다. 이 값은 0보다 커야 합니다.
[in, optional] lpName
세마포 개체의 이름입니다. 이름은 MAX_PATH 문자로 제한됩니다. 이름 비교는 대/소문자를 구분합니다.
lpName 기존 명명된 세마포 개체의 이름과 일치하는 경우 이 함수는 SEMAPHORE_ALL_ACCESS 액세스 권한을 요청합니다. 이 경우 lInitialCount 및 lMaximumCount 매개 변수는 만들기 프로세스에 의해 이미 설정되었으므로 무시됩니다.
lpName 기존 이벤트, 뮤텍스, 대기 가능한 타이머, 작업 또는 파일 매핑 개체의 이름과 일치하면 함수가 실패하고 GetLastError 함수가 ERROR_INVALID_HANDLE반환합니다. 이러한 개체는 동일한 네임스페이스를 공유하기 때문에 발생합니다.
이름에는 전역 또는 세션 네임스페이스에서 개체를 명시적으로 만드는 "전역" 또는 "로컬" 접두사를 가질 수 있습니다. 이름의 나머지 부분에는 백슬래시 문자(\)를 제외한 모든 문자가 포함될 수 있습니다. 자세한 내용은 커널 개체 네임스페이스
개체는 프라이빗 네임스페이스에서 만들 수 있습니다. 자세한 내용은 개체 네임스페이스참조하세요.
반환 값
함수가 성공하면 반환 값은 세마포 개체에 대한 핸들입니다. 함수 호출 전에 명명된 세마포 개체가 있는 경우 함수는 기존 개체에 대한 핸들을 반환하고 getLastError
함수가 실패하면 반환 값은 NULL
발언
CreateSemaphore에서 반환된 핸들에는 SEMAPHORE_ALL_ACCESS 액세스 권한이 있습니다. 호출자에게 액세스 권한이 부여된 경우 세마포 개체에 대한 핸들이 필요한 모든 함수에서 사용할 수 있습니다. 다른 사용자를 가장하는 서비스 또는 스레드에서 세마포를 만든 경우 세마포를 만들 때 세마포에 보안 설명자를 적용하거나 기본 DACL을 변경하여 만들기 프로세스에 대한 기본 보안 설명자를 변경할 수 있습니다. 자세한 내용은 동기화 개체 보안 및 액세스 권한
세마포 개체의 상태는 개수가 0보다 크면 신호를 받고, 개수가 0과 같으면 서명되지 않습니다. lInitialCount 매개 변수는 초기 개수를 지정합니다. 개수는 lMaximumCount 매개 변수에 지정된 값보다 작거나 0보다 클 수 없습니다.
호출 프로세스의 스레드는
여러 프로세스에 동일한 세마포 개체의 핸들이 있을 수 있으므로 프로세스 간 동기화에 개체를 사용할 수 있습니다. 사용할 수 있는 개체 공유 메커니즘은 다음과 같습니다.
- CreateProcess 함수에서 만든 자식 프로세스는 lpSemaphoreAttributes가 CreateSemaphore 사용 상속의 매개 변수인 경우 세마포 개체에 대한 핸들을 상속할 수 있습니다.
- 프로세스는 DuplicateHandle 함수를 호출할 때 세마포 개체 핸들을 지정하여 다른 프로세스에서 사용할 수 있는 중복 핸들을 만들 수 있습니다.
- 프로세스는 [OpenSemaphore](/windows/win32/api/synchapi/nf-synchapi-opensemaphorew) 또는 CreateSemaphore 함수에 대한 호출에서 세마포 개체의 이름을 지정할 수 있습니다.
예제
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |
참고 항목
closeHandle
CreateProcess
createSemaphoreEx
동기화 함수