ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 5422
Скачиваний: 10
111
Процедуры
детекции
взаимоблокировки
завершают
свою
работу
,
отменяя
одну
из
транзакций
и
продвигая
следую
-
щую
транзакцию
в
очереди
.
Другой
способ
контроля
параллельной
обработки
-
двух
-
фазная
блокировка
.
Говорят
,
что
транзакция
следует
протоко
-
лу
двухфазной
блокировки
,
если
все
операции
блокировки
-
read_lock, write_lock -
предшествуют
первой
операции
раз
-
блокирования
в
транзакции
.
Опция
read_lock
позволяет
счи
-
тывать
запись
,
а
write_lock
позволяет
и
считывать
,
и
обнов
-
лять
данную
запись
.
Проверено
,
что
транзакции
могут
вы
-
полняться
так
,
что
их
результаты
будут
такими
же
,
как
если
бы
они
выполнялись
одна
за
другой
без
прерывания
.
Одна
-
ко
у
двухфазной
блокировки
тоже
есть
свои
недостатки
.
Она
может
привести
к
взаимоблокировке
,
если
совместно
с
ней
не
применяется
протокол
предотвращения
взаимоблоки
-
ровки
.
В
качестве
примера
на
рис
. 5.6
видим
процедуру
двух
-
фазной
блокировки
,
приводящую
к
взаимоблокировке
.
Значения
Значения
записей
об
записей
об
индейках
(
И
)
индейках
(
И
)
и
окороках
и
окороках
(
О
) (
О
)
Т
1
Т
2
Read_lock (O)
Запрещено
Read_lock(
И
)
Чтение
элемента
О
О
=100
Чтение
элемента
И
И
=30
Write_lock(
И
)
Запрещено
Write_lock(
О
)
Разблокирование
О
И
=30
Разблокирование
И
Чтение
элемента
И
Чтение
элемента
О
И
=
И
-25
О
=
О
-25
Запись
элемента
И
И
=5
Запись
элемента
О
Разблокирование
И
Разблокирование
О
Рис
.5.6
Пример
двухфазной
блокировки
,
приведшей
к
взаимоблокировке
Транзакция
1 (
Т
1)
задает
опцию
read_lock
для
записи
О
(
окорок
);
одновременно
Т
2
задает
опцию
read_lock
для
за
-
писи
И
(
индейка
).
Через
два
шага
и
Т
1,
и
Т
2
требуют
оп
-
цию
write_lock
для
той
записи
,
которая
удерживается
опцией
112
read_lock
другой
транзакции
.
Такое
действие
запрещено
,
так
как
в
этом
случае
значение
может
быть
изменено
операци
-
ей
записи
,
выполненной
другой
транзакцией
.
Тогда
конкури
-
рующий
источник
опции
read_lock
может
считать
неверное
значение
.
Применение
двухфазной
блокировки
с
протоколом
предот
-
вращения
взаимоблокировки
показано
на
рис
.5.7.
Добавили
требование
того
,
чтобы
все
элементы
данных
,
необходимые
в
транзакции
,
блокировались
заранее
.
Если
какие
-
либо
из
элементов
данных
недоступны
,
то
ни
один
элемент
не
бло
-
кируется
и
транзакция
задерживается
до
тех
пор
,
пока
все
нужные
ей
элементы
не
будут
доступны
.
Значения
Значения
записей
об
записей
об
индейках
(
И
)
индейках
(
И
)
и
окороках
и
окороках
(
О
) (
О
)
Т
1
Т
2
Read_lock (
О
)
Write_lock (
И
)
О
=100 (
ожидание
)
Чтение
элемента
О
Разблокирование
О
И
=30
Чтение
элемента
И
И
=
И
-25
Запись
элемента
И
И
=5
Разблокирование
И
Write_lock (
О
)
Read_lock (
И
)
Чтение
элемента
О
О
=100
О
=
О
-25
Запись
элемента
О
О
=75
Разблокирование
О
Чтение
элемента
И
И
=5
Разблокирование
И
Рис
. 5.7.
Пример
двухфазной
блокировки
с
протоколом
предотвращения
взаимоблокировки
На
рис
.5.8
приведен
пример
,
демонстрирующий
парал
-
лельные
операции
,
которые
можно
привести
к
последова
-
тельной
форме
.
113
Значения
Значения
записей
об
записей
о
индейках
(
И
)
говядине
(
Г
)
и
окороках
и
окороках
(
О
) (
О
)
Т
1
Т
2
Read_lock (
О
)
Write_lock (
И
)
О
=100 (
ожидание
)
Чтение
элемента
О
Разблокирование
О
И
=30 Write_lock (
О
)
Чтение
элемента
И
Read_lock (
Г
)
И
=
И
-25
Чтение
элемента
О
О
=100
Запись
элемента
И
И
=5
О
=
О
-25
Разблокирование
И
Запись
элемента
О
О
=75
Разблокирование
О
Чтение
элемента
Г
Г
=60
Разблокирование
Г
Рис
.5.8.
Пример
двухфазной
блокировки
с
протоколом
избежания
взаимоблокировки
,
в
результате
которого
выполняется
последовательная
обработка
114
ЛИТЕРАТУРА
1.
Карпова
Т
.
Базы
данных
.
Модели
,
разработка
,
реализация
. –
СПб
., 2001.
2.
Глушаков
С
.
В
.,
Ломотько
Д
.
В
.
Базы
данных
.
Учебный
курс
.-
М
., 2000.
3.
Базы
данных
/
Под
.
ред
.
А
.
Д
.
Хомоненко
. –
СПб
., 2000.
4.
Базы
данных
.
Разработка
и
управление
/
Под
.
ред
.
С
.
Кара
-
тыгинах
. -
М
., 1999.