ReleaseSemaphore 함수(synchapi.h)
지정된 세마포 개체의 개수를 지정된 양만큼 늘입니다.
구문
BOOL ReleaseSemaphore(
[in] HANDLE hSemaphore,
[in] LONG lReleaseCount,
[out, optional] LPLONG lpPreviousCount
);
매개 변수
[in] hSemaphore
세마포 개체에 대한 핸들입니다. CreateSemaphore 또는 OpenSemaphore 함수는 이 핸들을 반환합니다.
이 핸들에는 SEMAPHORE_MODIFY_STATE 액세스 권한이 있어야 합니다. 자세한 내용은 동기화 개체 보안 및 액세스 권한을 참조하세요.
[in] lReleaseCount
세마포 개체의 현재 개수를 늘릴 크기입니다. 값은 0보다 커야 합니다. 지정된 양으로 인해 세마포의 수가 세마포를 만들 때 지정된 최대 개수를 초과하게 되면 개수가 변경되지 않고 함수가 FALSE를 반환 합니다.
[out, optional] lpPreviousCount
세마포에 대한 이전 개수를 받을 변수에 대한 포인터입니다. 이전 개수가 필요하지 않은 경우 이 매개 변수는 NULL 일 수 있습니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
세마포 개체의 상태는 개수가 0보다 크고 개수가 0이면 부호가 없는 경우 신호를 보냅니다. CreateSemaphore 함수를 호출하는 프로세스는 세마포의 초기 수를 지정합니다. 세마포의 신호 상태 때문에 대기 스레드가 해제될 때마다 세마포 수가 1씩 감소합니다.
일반적으로 애플리케이션은 세마포를 사용하여 리소스를 사용하는 스레드 수를 제한합니다. 스레드가 리소스를 사용하기 전에 대기 함수 중 하나에 대한 호출에서 세마포 핸들을 지정합니다. 대기 함수가 반환되면 세마포 수가 1씩 감소합니다. 스레드가 리소스 사용을 완료하면 ReleaseSemaphore 를 호출하여 세마포 수를 1씩 늘입니다.
ReleaseSemaphore의 또 다른 사용은 애플리케이션을 초기화하는 동안입니다. 애플리케이션은 초기 개수가 0인 세마포를 만들 수 있습니다. 이렇게 하면 세마포의 상태가 서명되지 않은 상태로 설정되고 모든 스레드가 보호된 리소스에 액세스하지 못하도록 차단합니다. 애플리케이션이 초기화를 완료하면 ReleaseSemaphore 를 사용하여 개수를 최대 값으로 늘려 보호된 리소스에 대한 일반적인 액세스를 허용합니다.
lReleaseCount는 음수일 수 없으므로 ReleaseSemaphore를 사용하여 세마포 개체 수를 줄일 수 없습니다. 액세스를 일시적으로 제한하거나 줄이려면 세마포 수가 충분히 감소할 때까지 제한 시간 간격이 0인 WaitForSingleObject 함수를 호출하는 루프를 만듭니다. (이 루프가 실행되는 동안 다른 스레드는 개수를 줄일 수 있습니다.) 액세스를 복원하려면 릴리스 수가 루프에서 WaitForSingleObject가 호출된 횟수와 동일한 ReleaseSemaphore를 호출합니다.
예제
ReleaseSemaphore를 사용하는 예제는 세마포 개체 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | synchapi.h(Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2에 Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |