Если приоритет второй транзакции мал, то она ждать будет долго.
Минусы блокировок.
Совместимость блокировок.
| запись объекта | Чтение объекта | запись части объекта | чтение части объекта | чтение/запись части объекта | |
| запись объекта | нет | Нет | нет | нет | Нет | 
| чтение объекта | нет | Да | нет | да | Нет | 
| запись части объекта | нет | Нет | да | да | Да | 
| чтение части объекта | нет | Да | нет | да | Да | 
| чтение/запись части объекта | нет | Нет | нет | да | Нет | 
| Транзакция1 | Транзакция2 | Транзакция3 | 
| LOCK A ... ... UNLOCK A ... LOCK A | ... ... ... LOCK A | ... ... ... LOCK A ... UNLOCK A | 
Решения:
1. Динамические приоритеты (чем дольше ждет, тем выше приоритет)
2. Ранжирование очередей (несколько очередей, в каждой транзакции одного приоритета. очереди обходятся по-порядку, из них по очереди достаются транзакции.
| Транзакция1 | Транзакция2 | 
| LOCK A ... LOCK B ... ... | LOCK B ... LOCK A ... ... | 
Дойдя до этого места, транзакции войдут в тупик, ожидая друг друга.
Способы обнаружения тупиков:
1. Контроль времени ожидания
2. Построение графа ожиданий.
|  | 
При обнаружении подобной структуры выбирается транзакция с наименьшим приоритетом и она снимается.
Способы предупреждения тупиков:
1. упорядочить ресурсы БД и захватывать их в заданном порядке.
2. захватывать в транзакции сразу все объекты.
Двухфазный протокол:
Все операции LOCK должны предшествовать операциям UNLOCK.
| Транзакция1 | Транзакция2 | 
| LOCK A LOCK B ….. LOCK C ….. UNLOCK A ….. | LOCK C
 …..
 UNLOCK C
 ……
 …… | 






