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

return 0;

}

int main(int argc, char* argv[])

{

// Началосессии

_beginthreadex(0,0,thread_proc,0,0,0);

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

Sleep(100);

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

// Созданиемассива

int* pAr = new int[fake.get_Value()];

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

Sleep(1000);

// Инициализациямассива

for(int i = 0;i < fake.value;i++)

pAr[i] = 0;

if (pAr) delete[] pAr;

fake.Commit();

return 0;

}

Если запустить этот пример, он, как и предыдущий, приведет к ошибке доступа к памяти. Дело в том, что изначально создается массив размером в 20 элементов, а в цикле инициализации используется значение 40, и на 21 элементе мы получим ошибку доступа.

Проблема повторного чтения состоит в том, что между операциями чтения в одной транзакции другие транзакции могут беспрепятственно вносить любые изменения, так что повторное чтение тех же данные приведет к другому результату.

Для поддержки третьего уровня изоляции в код изменений вносить не надо! :) Необходимо лишь не снимать разделяемые блокировки до конца транзакции. Так как метод, приведенный ниже, снимает блокировку только на уровне READ_COMMITTED:

void RemoveShared(int level)

{

if (level == READ_COMMITTED){

RemoveSharedLock();

}

}

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