이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

SemaphoreFullException 클래스

 

게시 날짜: 2016년 11월

카운트가 이미 최대값에 도달한 세마포에 대해 Semaphore.Release 메서드를 호출한 경우 throw되는 예외입니다.

네임스페이스:   System.Threading
어셈블리:  mscorlib(mscorlib.dll에 있음)

System.Object
  System.Exception
    System.SystemException
      System.Threading.SemaphoreFullException

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class SemaphoreFullException : SystemException

이름설명
System_CAPS_pubmethodSemaphoreFullException()

기본값을 사용하여 SemaphoreFullException 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_protmethodSemaphoreFullException(SerializationInfo, StreamingContext)

serialize된 데이터를 사용하여 SemaphoreFullException 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_pubmethodSemaphoreFullException(String)

지정된 오류 메시지를 사용하여 SemaphoreFullException 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_pubmethodSemaphoreFullException(String, Exception)

지정된 오류 메시지와 해당 예외의 원인인 내부 예외에 대한 참조를 사용하여 SemaphoreFullException 클래스의 새 인스턴스를 초기화합니다.

이름설명
System_CAPS_pubpropertyData

예외에 대한 사용자 정의 추가 정보를 제공하는 키/값 쌍의 컬렉션을 가져옵니다.(Exception에서 상속됨)

System_CAPS_pubpropertyHelpLink

이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다.(Exception에서 상속됨)

System_CAPS_pubpropertyHResult

특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다.(Exception에서 상속됨)

System_CAPS_pubpropertyInnerException

현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다.(Exception에서 상속됨)

System_CAPS_pubpropertyMessage

현재 예외를 설명하는 메시지를 가져옵니다.(Exception에서 상속됨)

System_CAPS_pubpropertySource

오류를 발생시키는 응용 프로그램 또는 개체의 이름을 가져오거나 설정합니다.(Exception에서 상속됨)

System_CAPS_pubpropertyStackTrace

호출 스택의 직접 실행 프레임 문자열 표현을 가져옵니다.(Exception에서 상속됨)

System_CAPS_pubpropertyTargetSite

현재 예외를 throw하는 메서드를 가져옵니다.(Exception에서 상속됨)

이름설명
System_CAPS_pubmethodEquals(Object)

지정한 개체가 현재 개체와 같은지 여부를 확인합니다. (Object에서 상속됨)

System_CAPS_protmethodFinalize()

개체가 가비지 수집자에서 회수되기 전에, 해당 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)

System_CAPS_pubmethodGetBaseException()

파생 클래스에서 재정의된 경우 하나 이상의 후속 예외의 근본 원인이 되는 Exception을 반환합니다.(Exception에서 상속됨)

System_CAPS_pubmethodGetHashCode()

기본 해시 함수로 작동합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

파생 클래스에서 재정의된 경우 예외에 관한 정보를 SerializationInfo에 설정합니다.(Exception에서 상속됨)

System_CAPS_pubmethodGetType()

현재 인스턴스의 런타임 형식을 가져옵니다.(Exception에서 상속됨)

System_CAPS_protmethodMemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.(Object에서 상속됨)

System_CAPS_pubmethodToString()

현재 예외에 대한 문자열 표현을 만들고 반환합니다.(Exception에서 상속됨)

이름설명
System_CAPS_proteventSerializeObjectState

예외에 대한 serialize된 데이터를 포함하는 예외 상태 개체를 만들기 위해 예외를 serialize할 때 발생합니다.(Exception에서 상속됨)

세마포에서 개수가 스레드가 세마포를 입력 하 고 스레드가 세마포를 해제 하는 경우에 증가 될 때마다 감소 됩니다. 수가 0이 경우 후속 요청에 다른 스레드가 세마포를 해제할 때까지 차단 합니다. 모든 스레드가 세마포를 해제 한 경우의 수는 최대 값 지정 된 세마포를 만들 때. 프로그래밍 오류가 발생 하는 스레드를 호출 하는 경우는 Semaphore.Release 이 시점에서 메서드는 SemaphoreFullException 이 throw 됩니다.

System_CAPS_note참고

Semaphore 클래스에 대 한 호출에 스레드 id를 적용 하지 않는 WaitHandle.WaitOneSemaphore.Release 메서드. 필요한 것과 동일한 스레드에서 호출에 대 한 WaitOne 호출할 Release합니다.

SemaphoreFullException 반드시 예외가 발생 하는 코드에 문제가 있습니다. 다음 시나리오를 고려 합니다: 스레드 A와 스레드 B 2의 최대 수가 있는 세마포를 입력 합니다. 스레드 B에서에서 프로그래밍 오류를 호출 하면 Release 을 두 번 세마포는 카운트 꽉 참 되도록 합니다. 결과적으로, 스레드 A 호출 Release, SemaphoreFullException 이 throw 됩니다.

SemaphoreFullException 클래스의 인스턴스에 대한 초기 속성 값 목록은 SemaphoreFullException() 생성자를 참조하십시오.

다음 코드 예제에서는 하나의 스레드만의 프로그래밍 오류로 이어질 수 있습니다는 SemaphoreFullException 다른 스레드의: 두 개의 스레드가 세마포를 입력 합니다. 두 번째 스레드는 첫 번째 스레드가 아직 작업을 실행 하는 동안 세마포를 두 번 해제 합니다. 첫 번째 스레드를 끝내 세마포를 해제할 때 세마포 카운트 이미 꽉 및 예외가 throw 됩니다.

using System;
using System.Threading;

public class Example
{
    // A semaphore that can satisfy at most two concurrent
    // requests.
    //
    private static Semaphore _pool = new Semaphore(2, 2);

    public static void Main()
    {
        // Create and start two threads, A and B. 
        //
        Thread tA = new Thread(new ThreadStart(ThreadA));
        tA.Start();

        Thread tB = new Thread(new ThreadStart(ThreadB));
        tB.Start();
    }

    private static void ThreadA()
    {
        // Thread A enters the semaphore and simulates a task
        // that lasts a second.
        //
        _pool.WaitOne();
        Console.WriteLine("Thread A entered the semaphore.");

        Thread.Sleep(1000);

        try
        {
            _pool.Release();
            Console.WriteLine("Thread A released the semaphore.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Thread A: {0}", ex.Message);
        }
    }

    private static void ThreadB()
    {
        // Thread B simulates a task that lasts half a second,
        // then enters the semaphore.
        //
        Thread.Sleep(500);

        _pool.WaitOne();
        Console.WriteLine("Thread B entered the semaphore.");

        // Due to a programming error, Thread B releases the
        // semaphore twice. To fix the program, delete one line.
        _pool.Release();
        _pool.Release();
        Console.WriteLine("Thread B exits successfully.");
    }
}
/* This code example produces the following output:

Thread A entered the semaphore.
Thread B entered the semaphore.
Thread B exits successfully.
Thread A: Adding the given count to the semaphore would cause it to exceed its maximum count.
 */

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
2.0 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Windows Phone Silverlight
8.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능

이 형식의 모든 public static(Visual Basic의 공유 Visual Basic의 경우) 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전이 보장되지 않습니다.

맨 위로 이동
표시: