Блокировки в MS SQL Server 2000
Категория реферата: Рефераты по информатике, программированию
Теги реферата: реферат на тему мыло, контрольная работа 7
Добавил(а) на сайт: Васёна.
Предыдущая страница реферата | 17 18 19 20 21 22 23 24 25 26 27 | Следующая страница реферата
// Проверка на блокировку обновления
EnterCriticalSection(&update);
// Проверка на монопольную блокировку
EnterCriticalSection(&exclusive);
// Снимаем блокировку обновления
LeaveCriticalSection(&update);
// Вошли больше одного раза
if (exclusive.RecursionCount > 1)
LeaveCriticalSection(&exclusive);
}
void RemoveSharedLock()
{
SetEvent(hShared);
}
void RemoveAllLocks()
{
RemoveSharedLock();
// Если была установлена блокировка обновления - снимаем
if (update.OwningThread == (HANDLE)GetCurrentThreadId())
LeaveCriticalSection(&update);
// Если была установлена монопольная блокировка - снимаем
if (exclusive.OwningThread == (HANDLE)GetCurrentThreadId())
LeaveCriticalSection(&exclusive);
}
int value;
CRITICAL_SECTION update;
CRITICAL_SECTION exclusive;
HANDLE hShared;
static HANDLE hMutex;
};
__declspec(selectany) HANDLE CObject::hMutex = NULL;
CProxy& CObject::GetObject(int level)
{
HANDLE hLocMutex = CreateMutex(NULL,TRUE,_T("Guard-Lock-Mutex"));
bool flg = GetLastError() == ERROR_ALREADY_EXISTS;
if (flg) WaitForSingleObject(hLocMutex,INFINITE);
else CObject::hMutex = hLocMutex;
static CObject obj;
ReleaseMutex(hLocMutex);
if (flg) CloseHandle(hLocMutex);
return obj.BeginTran(level);
}
void CProxy::Commit()
{
#ifdef ORACLE
parent->value = _value;
#endif
Рекомендуем скачать другие рефераты по теме: решебник по физике, украинские рефераты.
Предыдущая страница реферата | 17 18 19 20 21 22 23 24 25 26 27 | Следующая страница реферата