На рис. 15.10 приведена измененная версия отношения (рис. 15.5) с перечислением чередующихся транзакций согласно протоколу блокировки. Операция обновления для транзакции B в момент времени t6 не будет выполнена. Дело в том, что она является неявным запросом с заданием Х-блокировки для кортежа СЧЕТ 1, а этот запрос вступает в конфликт с S-блокировкой, уже заданной транзакцией A. Таким образом, транзакция B переходит в состояние ожидания. Точно так же операция извлечения для транзакции A в момент времени t7 не будет выполнена. Дело в том, что она является неявным запросом с заданием S-блокировки для кортежа СЧЕТ 3, а этот запрос вступает в конфликт с Х‑блокировкой, уже заданной транзакцией B. Таким образом, транзакция A переходит в состояние ожидания. Следовательно, блокировка хотя и помогает решить одну проблему (а именно проблему несовместимого анализа), но приводит к необходимости решения другой проблемы (а именно проблемы возникновения тупиковой ситуации).
СЧЕТ 1 | СЧЕТ 2 | СЧЕТ 3 |
Транзакция A | Время | Транзакция B |
Извлечение кортежа СЧЕТ 1: (задание S-блокировки для СЧЕТ 1) СУММА = 40 | t1 | – |
Извлечение кортежа СЧЕТ 1: (задание S-блокировки для СЧЕТ 2) СУММА = 90 | t2 | – |
– | t3 | Извлечение кортежа СЧЕТ 3: (задание S-блокировки для СЧЕТ 3) |
– | t4 | Обновление кортежа СЧЕТ 3: (задание X-блокировки для СЧЕТ 3) 30 ® 20 |
– | t5 | Извлечение кортежа СЧЕТ 1: (задание S-блокировки для СЧЕТ 1) |
– | t6 | Обновление кортежа СЧЕТ 1: (задание X-блокировки для СЧЕТ 1) 40 ® 50 |
– | t7 | Ожидание |
Извлечение кортежа СЧЕТ 3: (задание S-блокировки для СЧЕТ 3) | t8 | Ожидание |
Ожидание | Ожидание |
рис. 15.10. Проблема несовместимого анализа разрешается, но в момент времени t7 возникает тупиковая ситуация.