내보내기(0) 인쇄
모두 확장
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본

SemaphoreSlim 클래스

리소스 또는 리소스 풀에 동시에 액세스할 수 있는 스레드 수를 제한하는 Semaphore 대신 사용할 수 있는 간단한 클래스입니다.

System.Object
  System.Threading.SemaphoreSlim

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

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class SemaphoreSlim : IDisposable

SemaphoreSlim 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드SemaphoreSlim(Int32)동시에 부여할 수 있는 초기 요청 수를 지정하여 SemaphoreSlim 클래스의 새 인스턴스를 초기화합니다.
Public 메서드SemaphoreSlim(Int32, Int32)동시에 부여할 수 있는 초기 및 최대 요청 수를 지정하여 SemaphoreSlim 클래스의 새 인스턴스를 초기화합니다.
위쪽

  이름설명
Public 속성AvailableWaitHandle세마포에서 대기하는 데 사용할 수 있는 WaitHandle을 반환합니다.
Public 속성CurrentCount SemaphoreSlim 에 진입할 수 있도록 허용할 스레드 수를 가져옵니다.
위쪽

  이름설명
Public 메서드Dispose() SemaphoreSlim 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.
Protected 메서드Dispose(Boolean)파생 클래스에서 재정의된 경우 ManualResetEventSlim에서 사용하는 관리되지 않는 리소스를 해제하고 필요에 따라 관리되는 리소스를 해제합니다.
Public 메서드Equals(Object)지정한 Object가 현재 Object와 같은지 여부를 확인합니다. (Object에서 상속됨)
Protected 메서드Finalize 개체가 가비지 수집자에서 회수되기 전에, 해당 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetHashCode특정 형식에 대한 해시 함수 역할을 합니다. (Object에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드Release() SemaphoreSlim 을 한 번 종료합니다.
Public 메서드Release(Int32) SemaphoreSlim 을 지정된 횟수만큼 종료합니다.
Public 메서드ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
Public 메서드Wait()현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
Public 메서드Wait(CancellationToken) CancellationToken 을 확인하면서 현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
Public 메서드Wait(Int32)시간 제한을 지정하는 부호 있는 32비트 정수를 사용하여 현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
Public 메서드Wait(TimeSpan) TimeSpan 으로 시간 제한을 지정하여 현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
Public 메서드Wait(Int32, CancellationToken) CancellationToken 을 확인하면서 시간 제한을 지정하는 부호 있는 32비트 정수를 사용하여 현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
Public 메서드Wait(TimeSpan, CancellationToken) CancellationToken 을 확인하면서 시간 제한을 지정하는 TimeSpan을 사용하여 현재 스레드가 SemaphoreSlim에 진입할 수 있을 때까지 스레드를 차단합니다.
위쪽

SemaphoreSlim 은 Windows 커널 세마포를 사용하지 않는 간단한 세마포 클래스를 제공합니다.

참고참고

이 형식 또는 멤버에 적용되는 HostProtectionAttribute 특성의 Resources 속성 값은 Synchronization | ExternalThreading입니다. HostProtectionAttribute는 대개 아이콘을 두 번 클릭하거나, 명령을 입력하거나, 브라우저에서 URL을 입력하여 시작되는 데스크톱 응용 프로그램에 영향을 미치지 않습니다. 자세한 내용은 HostProtectionAttribute 클래스 또는 SQL Server 프로그래밍 및 호스트 보호 특성을 참조하십시오.

다음 예제에서는 SemaphoreSlim를 사용하는 방법을 보여 줍니다.


using System;
using System.Threading;
using System.Threading.Tasks;

class SemaphoreSlimDemo
{
    // Demonstrates:
    //      SemaphoreSlim construction
    //      SemaphoreSlim.Wait()
    //      SemaphoreSlim.Release()
    //      SemaphoreSlim.AvailableWaitHandle
    static void Main()
    { 

        SemaphoreSlim ss = new SemaphoreSlim(2); // set initial count to 2
        Console.WriteLine("Constructed a SemaphoreSlim with an initial count of 2");

        Console.WriteLine("First non-blocking Wait: {0} (should be true)", ss.Wait(0));
        Console.WriteLine("Second non-blocking Wait: {0} (should be true)", ss.Wait(0));
        Console.WriteLine("Third non-blocking Wait: {0} (should be false)", ss.Wait(0));

        // Do a Release to free up a spot
        ss.Release();

        Console.WriteLine("Non-blocking Wait after Release: {0} (should be true)", ss.Wait(0));

        // Launch an asynchronous Task that releases the semaphore after 100 ms
        Task t1 = Task.Factory.StartNew(() =>
        {
            Thread.Sleep(100);
            Console.WriteLine("Task about to release SemaphoreSlim");
            ss.Release();
        });

        // You can also wait on the SemaphoreSlim via the underlying Semaphore WaitHandle.
        // HOWEVER, unlike SemaphoreSlim.Wait(), it WILL NOT decrement the count.
        // In the printout below, you will see that CurrentCount is still 1
        ss.AvailableWaitHandle.WaitOne();
        Console.WriteLine("ss.AvailableWaitHandle.WaitOne() returned, ss.CurrentCount = {0}", ss.CurrentCount);

        // Now a real Wait(), which should return immediately and decrement the count.
        ss.Wait();
        Console.WriteLine("ss.CurrentCount after ss.Wait() = {0}", ss.CurrentCount);

        // Clean up
        t1.Wait();
        ss.Dispose();
    }
}


.NET Framework

4에서 지원

.NET Framework Client Profile

4에서 지원

Windows 7, Windows Vista SP1 이상, Windows XP SP3, Windows Server 2008(Server Core는 지원되지 않음), Windows Server 2008 R2(Server Core는 SP1 이상에서 지원됨), Windows Server 2003 SP2

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

SemaphoreSlim 의 모든 공용 및 보호된 멤버는 SemaphoreSlim의 다른 모든 작업이 완료될 때만 사용해야 하는 Dispose를 제외하고 스레드로부터 안전하며 멀티 스레드에서 동시에 사용할 수 있습니다.

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft