정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Semaphore.Release 메서드 (Int32)

2013-12-13

지정된 횟수만큼 세마포를 종료하고 이전 카운트를 반환합니다.

Namespace:  System.Threading
어셈블리:  System(System.dll)

public int Release(
	int releaseCount
)

매개 변수

releaseCount
형식: System.Int32
세마포를 종료할 횟수입니다.

반환 값

형식: System.Int32
Release 메서드가 호출되기 전의 세마포 카운트입니다.

예외조건
ArgumentOutOfRangeException

releaseCount가 1보다 작은 경우

SemaphoreFullException

세마포 카운트가 이미 최대값인 경우

IOException

명명된 세마포에서 Win32 오류가 발생한 경우

UnauthorizedAccessException

현재 세마포가 명명된 시스템 세마포를 나타내지만 사용자에게 필요한 액세스 권한이 없는 경우

스레드가 세마포에 여러 번 진입한 경우, 이 메서드 오버로드를 사용하면 한 번의 호출로 전체 세마포 카운트를 복원할 수 있습니다.

Release 메서드에서 SemaphoreFullException이 발생해도 호출한 스레드에 반드시 문제가 있는 것은 아닙니다. 다른 스레드의 프로그래밍 오류로 인해 해당 스레드에서 진입한 횟수보다 더 많이 세마포를 종료했을 수도 있습니다.

다음 코드 예제에서는 최대 카운트가 3이고 초기 카운트가 0인 세마포를 만듭니다. 예제에서는 세마포를 기다리지 않도록 차단하는 5개의 스레드를 시작합니다. 주 스레드에서는 3개의 스레드가 세마포에 진입하도록 허용하여 Release(Int32) 메서드 오버로드를 통해 세마포 카운트를 최대값까지 증가시킵니다. 각 스레드는 Thread.Sleep 메서드를 사용하여 1초 동안 기다리고 작업을 시뮬레이션한 다음 Release() 메서드 오버로드를 사용하여 세마포를 해제합니다.

세마포가 해제될 때마다 이전 세마포 카운트가 표시됩니다. 콘솔 메시지가 세마포 사용을 추적합니다. 출력을 쉽게 읽을 수 있도록 시뮬레이션된 작업 간격이 각 스레드마다 약간씩 증가됩니다.

Windows Phone OS

지원되는 버전: 8.0

표시: