4.1 - Deadlocks
Mas como a relação é mútua, nunca ocorrerá o bloqueio do item. Desta forma, ambas as transações ficam impossibilitadas de serem processadas.
Uma das formas de se evitar esse problema é usando um protocolo de prevenção de deadlock. Esse protocolo é utilizado no bloqueio de duas fases e funciona sobre a seguinte regra:
Ou seja, ao criar um bloqueio, o protocolo verifica que esse item de dado a ser bloqueado está na iminência de ser utilizado por alguma outra transação. Se houver algum item de dado nessa situação, o protocolo impede a criação do bloqueio. Mas a transação X não é cancelada, ela fica aguardando a execução das demais transações até que nenhuma das transações pendentes utilize algum item de dado desta transação. Feito isso, ocorre o bloqueio normal dos itens de dados que ela precisa.
Outra técnica para tratar um deadlock baseia-se na funcionalidade de detecção de deadlock. Nesse modelo, os deadlocks podem ocorrer, e a funcionalidade irá escolher uma das transações para abortá-la. Geralmente, a transação mais antiga tem prioridade, e a mais nova é, consequentemente, abortada.
A última técnica para tratar deadlock é por meio do uso de timeouts, onde, a partir de um determinado tempo limite de espera de processamento, a transação é automaticamente cancelada.