Export (0) Print
Expand All

SemaphoreSlim Class

A lightweight alternative to Semaphore that limits the number of threads that can access a resource or pool of resources concurrently.

System::Object
  System.Threading::SemaphoreSlim

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

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

The SemaphoreSlim type exposes the following members.

  NameDescription
Public methodSemaphoreSlim(Int32)Initializes a new instance of the SemaphoreSlim class, specifying the initial number of requests that can be granted concurrently.
Public methodSemaphoreSlim(Int32, Int32)Initializes a new instance of the SemaphoreSlim class, specifying the initial and maximum number of requests that can be granted concurrently.
Top

  NameDescription
Public propertyAvailableWaitHandleReturns a WaitHandle that can be used to wait on the semaphore.
Public propertyCurrentCountGets the number of threads that will be allowed to enter the SemaphoreSlim.
Top

  NameDescription
Public methodDispose()Releases all resources used by the current instance of the SemaphoreSlim class.
Protected methodDispose(Boolean)When overridden in a derived class, releases the unmanaged resources used by the SemaphoreSlim, and optionally releases the managed resources.
Public methodEquals(Object)Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as a hash function for a particular type. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodRelease()Exits the SemaphoreSlim once.
Public methodRelease(Int32)Exits the SemaphoreSlim a specified number of times.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodWait()Blocks the current thread until it can enter the SemaphoreSlim.
Public methodWait(CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, while observing a CancellationToken.
Public methodWait(Int32)Blocks the current thread until it can enter the SemaphoreSlim, using a 32-bit signed integer that specifies the timeout.
Public methodWait(TimeSpan)Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan to specify the timeout.
Public methodWait(Int32, CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, using a 32-bit signed integer that specifies the timeout, while observing a CancellationToken.
Public methodWait(TimeSpan, CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan that specifies the timeout, while observing a CancellationToken.
Top

The SemaphoreSlim provides a lightweight semaphore class that doesn't use Windows kernel semaphores.

NoteNote

The HostProtectionAttribute attribute applied to this type or member has the following Resources property value: Synchronization | ExternalThreading. The HostProtectionAttribute does not affect desktop applications (which are typically started by double-clicking an icon, typing a command, or entering a URL in a browser). For more information, see the HostProtectionAttribute class or SQL Server Programming and Host Protection Attributes.

The following example shows how to use a SemaphoreSlim:

No code example is currently available or this language may not be supported.

.NET Framework

Supported in: 4

.NET Framework Client Profile

Supported in: 4

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

All public and protected members of SemaphoreSlim are thread-safe and may be used concurrently from multiple threads, with the exception of Dispose, which must only be used when all other operations on the SemaphoreSlim have completed.

Community Additions

ADD
Show:
© 2014 Microsoft