Реферат: Блокировки в 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
|