B не может блокировать объект,
Пример 6
|
Транзакция B пытается наложить блокировку: |
Транзакция A наложила блокировку: |
S-блокировку |
X-блокировку |
S-блокировку |
Да |
НЕТ
(Конфликт
R-W)
X-блокировку |
НЕТ
(Конфликт
W-R)
НЕТ
(Конфликт
W-W)
Таблица 1 Матрица совместимости S- и X-блокировок
Три случая, когда транзакция B не может блокировать объект, соответствуют трем видам конфликтов между транзакциями.
Доступ к объектам базы данных на чтение и запись должен осуществляться в соответствии со следующим протоколом доступа к данным:
- Прежде чем прочитать объект, транзакция должна наложить на этот объект S-блокировку.
- Прежде чем обновить объект, транзакция должна наложить на этот объект X-блокировку. Если транзакция уже заблокировала объект S-блокировкой (для чтения), то перед обновлением объекта S-блокировка должна быть заменена X-блокировкой.
- Если блокировка объекта транзакцией B отвергается оттого, что объект уже заблокирован транзакцией A, то транзакция B переходит в состояние ожидания. Транзакция B будет находиться в состоянии ожидания до тех пор, пока транзакция A не снимет блокировку объекта.
- X-блокировки, наложенные транзакцией A, сохраняются до конца транзакции A.
Содержание раздела