Реферат: Блокировки в MS SQL Server 2000

void RemoveAllLocks()

{

RemoveSharedLock();

// Если была установлена монопольная блокировка - снимаем

if (exclusive.OwningThread == (HANDLE)GetCurrentThreadId())

LeaveCriticalSection(&exclusive);

}

int value;

CRITICAL_SECTION exclusive;

HANDLE hShared;

static HANDLE hMutex;

};

Теперь, если изменить константу READ_UNCOMMITTED в предыдущем примере на READ_COMMITTED в качестве параметра GetObject, все станет на свои места. При инициализации массива главный поток перейдет в состояние ожидания до тех пор, пока второй поток не выполнит строчку prx.Commit(); Размер массива в главном потоке будет равен 40 элементам.

Хорошо, прекрасно! Где там следующий уровень? :) Чтобы понять, зачем нужен следующий уровень изоляции транзакций «повторяющееся чтение», рассмотрим такой пример:

unsigned __stdcall thread_proc(void*)

{

{

// Началотранзакции

CProxy& prx = CObject::GetObject(CObject::READ_COMMITTED);

prx.value = 20;

prx.Commit();

}

// Эмулируемработу

Sleep(500);

{

// Началотранзакции

CProxy& prx = CObject::GetObject(CObject::READ_COMMITTED);

prx.value = 40;

prx.Commit();

К-во Просмотров: 984
Бесплатно скачать Реферат: Блокировки в MS SQL Server 2000