Критические секции
Категория реферата: Рефераты по информатике, программированию
Теги реферата: бесплатно решебник, рефераты на украинском языке
Добавил(а) на сайт: Сыровой.
Предыдущая страница реферата | 16 17 18 19 20 21 22 23 24 25 26 | Следующая страница реферата
}
}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 InitializeCriticalSectionDbg(LPCRITICAL_SECTION_DBG pcs)
{
// Пусть система заполнит свои поля
InitializeCriticalSection(pcs);
// Заполняем наши поля
pcs->m_nLine = 0;
pcs->m_azFile = NULL;
}
// Освобождаем ресурсы, занимаемые критической секцией
inline VOID DeleteCriticalSectionDbg(LPCRITICAL_SECTION_DBG pcs)
{
// Проверяем, чтобы не было удалений "захваченных" критических секций
ATLASSERT(0 == pcs->m_nLine && NULL == pcs->m_azFile);
// Остальное доделает система
DeleteCriticalSection(pcs);
}
// Заполучаем критическую секцию в свое пользование
inline VOID EnterCriticalSectionDbg(LPCRITICAL_SECTION_DBG pcs
, int nLine, LPSTR azFile)
{
if (::InterlockedIncrement(&pcs->LockCount))
{
// LockCount стал больше нуля.
// Проверяем идентификатор нити
if (pcs->OwningThread == (HANDLE)::GetCurrentThreadId())
{
// Нить та же самая. Критическая секция наша.
// Никаких дополнительных действий не производим.
// Это не совсем верно, так как возможно, что непарный
// вызов ::LeaveCriticalSection() был сделан на n-ном заходе,
// и это придется отлавливать вручную, но реализация
// стека для __LINE__ и __FILE__ сделает нашу систему
// более громоздкой. Если это действительно необходимо,
// вы всегда можете сделать это самостоятельно
pcs->RecursionCount++;
return;
}
// Критическая секция занята другой нитью.
Рекомендуем скачать другие рефераты по теме: реферат на экономическую тему, инновационная деятельность.
Предыдущая страница реферата | 16 17 18 19 20 21 22 23 24 25 26 | Следующая страница реферата