Если запустить этот пример, он, как и предыдущий, приведет к ошибке доступа к памяти. Дело в том, что изначально создается массив
размером в 20 элементов, а в цикле инициализации используется значение 40, и на
21 элементе мы получим ошибку доступа.
Проблема повторного чтения состоит в том, что между
операциями чтения в одной транзакции другие транзакции могут беспрепятственно
вносить любые изменения, так что повторное чтение тех же данные приведет к
другому результату.
Для поддержки третьего уровня изоляции в код изменений
вносить не надо! :) Необходимо лишь не снимать разделяемые блокировки до конца
транзакции. Так как метод, приведенный ниже, снимает блокировку только на
уровне READ_COMMITTED:
void RemoveShared(int level)
{
if (level == READ_COMMITTED){
RemoveSharedLock();
}
}
нам нужно лишь добавить новую константу в перечисление
типов блокировок.
Теперь, если в приведенном выше примере изменить
константу READ_COMMITTED на REPEATABLE_READ в качестве параметра GetObject, код
заработает правильно и без ошибок.
Рекомендуем скачать другие рефераты по теме: решебник по физике, украинские рефераты.