VOID
DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
Освобождает ресурсы, занимаемые критической секцией.
Листинг
3. Псевдокод RtlDeleteCriticalSection из ntdll.dll
VOID RtlDeleteCriticalSection(LPRTL_CRITICAL_SECTION pcs)
{
pcs->DebugInfo = NULL;
pcs->LockCount = -1;
pcs->RecursionCount = 0;
pcs->OwningThread = 0;
if (pcs->LockSemaphore)
{
::CloseHandle(pcs->LockSemaphore);
pcs->LockSemaphore =
NULL;
}
}
|
VOID
EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
BOOL
TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);
Осуществляют "захват" критической секции.
Если критическая секция занята другой нитью, то ::EnterCriticalSection() будет
ждать, пока та освободится, а ::TryEnterCriticalSection() вернет FALSE.
Отсутствует в Windows 9x/ME.
Листинг
4. Псевдокод RtlEnterCriticalSection из ntdll.dll