Реферат: Критические секции

}

}while(WAIT_TIMEOUT == dwWait);

ATLASSERT(WAIT_OBJECT_0 == dwWait);

}

// Выставляем событие в активное состояние

static inline VOID _UnWaitCriticalSectionDbg(LPCRITICAL_SECTION pcs)

{

HANDLE sem = _CriticalSectionGetEvent(pcs);

BOOL b = ::SetEvent(sem);

ATLASSERT(b);

}

// Заполучаем критическую секцию в свое пользование

inline VOID EnterCriticalSectionDbg(LPCRITICAL_SECTION pcs)

{

if (::InterlockedIncrement(&pcs->LockCount))

{

// LockCount сталбольшенуля.

// Проверяемидентификаторнити

if (pcs->OwningThread == (HANDLE)::GetCurrentThreadId())

{

// Нить та же самая. Критическая секция наша.

pcs->RecursionCount++;

return;

}

// Критическая секция занята другой нитью.

// Придется подождать

_WaitForCriticalSectionDbg(pcs);

}

// Либо критическая секция была "свободна",

К-во Просмотров: 769
Бесплатно скачать Реферат: Критические секции