4.1 - Deadlocks

O deadlock (impasse) ocorre quando uma transação A está esperando por algum item que está bloqueado por uma transação B, e esta transação B está esperando por algum item que está bloqueado na transação A. Logo, ambas transações permanecem pausadas, aguardando que uma delas libere o bloqueio em um item de dados.

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:

Uma transação X não pode criar bloqueios a itens de dados e houver outras transações em execução que utilizem itens de dados bloqueados pela transação X.

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.

Copyright © 2016 AIEC.