
Матрица интерпретируется следующим образом. Рассмотрим некоторый кортеж t и предположим, что транзакция А блокирует кортеж t различными типами блокировки (что обозначено в заголовках столбцов соответственно символами S и X, тогда как отсутствие блокировки — прочерком). Предположим также, что некоторая транзакция В запрашивает блокировку кортежа t.
В остальных ячейках матрицы символ N отмечает конфликтную ситуацию (запрос со стороны транзакции В не может быть удовлетворен, и эта транзакция переводится в состояние ожидания), a Y— допустимую ситуацию (запрос со стороны транзакции В удовлетворяется). Очевидно, что данная матрица является симметричной.
Теперь следует ввести понятие протокол доступа к данным (или протокол блокировки), который с помощью описанных выше Х- и S-блокировок позволит избежать возникновения проблем.
Прежде чем обновить какой-либо кортеж, транзакция должна установить для него Х-блокировку. Если транзакция уже установила для кортежа S-блокировку (что возможно в случае последовательного выполнения операций Retrieve и Update), необходимо расширить S-блокировку до уровня Х-блокировки.
Замечание. В транзакциях запросы на установку блокировки обычно задаются неявным образом; например, запрос на выборку кортежа подразумевает неявный запрос на установку для него S-блокировки, а запрос на обновление кортежа — неявный запрос на установку для него Х-блокировки.
При этом под термином "обновление" (как и ранее) подразумеваются, помимо операций UPDATE, также операции INSERT (вставка) и DELETE (удаление). При строгом описании протокола имеют место небольшие отличия, связанные с выполнением операций вставки и удаления, однако здесь они опущены.
Если запрашиваемая со стороны транзакции В блокировка отвергается из-за конфликта с блокировкой, уже установленной со стороны транзакции А, то транзакция В переводится в состояние ожидания. Причем транзакция В будет находиться в состоянии ожидания до тех пор, пока не будет снята блокировка, установленная ранее транзакцией А. Замечание. Система обязательно должна гарантировать, что транзакция В не будет находиться в состоянии ожидания бесконечно долго (иногда эту ситуацию называют зависанием). Самым простым способом получения подобной гарантии является организация обработки запросов на блокировку по принципу "первым поступил — первым обработан".
Х-блокировки сохраняются вплоть до конца выполнения установившей их транзакции (до ее фиксации (COMMIT) или отката (ROLLBACK)). S-блокировки также обычно сохраняются вплоть до окончания транзакции, однако в этом случае следует учесть замечания.