11 public Semaphore(
int initialCount,
int maximumCount)
12 : this(initialCount, maximumCount, null)
16 public Semaphore(
int initialCount,
int maximumCount,
string? name)
17 : this(initialCount, maximumCount, name, out var _)
21 public Semaphore(
int initialCount,
int maximumCount,
string? name, out
bool createdNew)
31 if (initialCount > maximumCount)
38 [SupportedOSPlatform(
"windows")]
51 [SupportedOSPlatform(
"windows")]
73 base.SafeWaitHandle =
handle;
76 private void CreateSemaphoreCore(
int initialCount,
int maximumCount,
string name, out
bool createdNew)
82 if (!
string.IsNullOrEmpty(name) && lastPInvokeError == 6)
88 createdNew = lastPInvokeError != 183;
89 base.SafeWaitHandle = safeWaitHandle;
129 return previousCount;
static SafeWaitHandle CreateSemaphoreEx(IntPtr lpSecurityAttributes, int initialCount, int maximumCount, string name, uint flags, uint desiredAccess)
static bool ReleaseSemaphore(SafeWaitHandle handle, int releaseCount, out int previousCount)
static SafeWaitHandle OpenSemaphore(uint desiredAccess, bool inheritHandle, string name)
static Exception GetExceptionForLastWin32Error(string path="")
static int GetLastPInvokeError()
static string ArgumentOutOfRange_NeedPosNum
static string Format(string resourceFormat, object p1)
static string Threading_WaitHandleCannotBeOpenedException_InvalidHandle
static string Argument_SemaphoreInitialMaximum
static string Argument_EmptyName
static string ArgumentOutOfRange_NeedNonNegNum
static string IO_PathNotFound_Path
Semaphore(SafeWaitHandle handle)
int Release(int releaseCount)
static Semaphore OpenExisting(string name)
Semaphore(int initialCount, int maximumCount, string? name, out bool createdNew)
Semaphore(int initialCount, int maximumCount)
Semaphore(int initialCount, int maximumCount, string? name)
static bool TryOpenExisting(string name, [NotNullWhen(true)] out Semaphore? result)
void CreateSemaphoreCore(int initialCount, int maximumCount, string name, out bool createdNew)
static OpenExistingResult OpenExistingWorker(string name, out Semaphore result)
int ReleaseCore(int releaseCount)
static readonly IntPtr Zero