Q:

Уменьшает ли функция WaitForSingleObject счетчик семафора, если она возвращает значение, отличное от WAIT_OBJECT_0?

Нужно ли вызвать ReleaseSemaphore в следующей ситуации?
HANDLE hSemaphore = OpenSemaphore(SYNCHRONIZE, FALSE, TEXT("Global\\Semaphore"));
DWORD dwWaitResult = WaitForSingleObject(hSemaphore, 0);
if (dwWaitResult != WAIT_OBJECT_0)
{
    ReleaseSemaphore(hSemaphore, 1, NULL);  // ???
}

A:

В комментарии к вопросу есть ответ: нет, не уменьшает.

