internal static bool Semaphore_TryLock(Kernel32.SafeSemaphoreHandle /*Semaphore*/ sem) => Kernel32.WaitForSingleObject(sem, 0) == Kernel32.WAIT_STATUS.WAIT_OBJECT_0;
internal static bool Semaphore_Unlock(Kernel32.SafeSemaphoreHandle /*Semaphore*/ sem) => Kernel32.ReleaseSemaphore(sem, 1, out int _ /*NULL*/);
internal static void Semaphore_Destroy(Kernel32.SafeSemaphoreHandle /*Semaphore*/ sem) => Kernel32.CloseHandle(sem.DangerousGetHandle());