Pode-se provar que, se toda transação em um escalonamento segue o
protocolo 2PL, então a transação é serializável. Embora o protocolo 2PL garanta
a serializabilidade, bloqueios podem gerar dois problemas: impasse (deadlock) e
inanição (livelock).
Deadlock ocorre quando, existem duas transações bloqueando o mesmo
item e cada uma das duas está esperando que a outra libere este bloqueio. A
solução mais comum para este problema de impasse é abortar uma das
transações envolvidas. Existem diversas implementações diferentes para decidir
qual transação deve ser interrompida no caso de um impasse, geralmente é
escolhida a transação mais nova. Isso pode causar o livelock (quando o sistema
não consegue decidir qual das transações deve ser abortada), então é introduzida
uma prioridade para as transações (por exemplo, maior prioridade para
transações que já foram abortadas anteriormente).
Variação do protocolo 2PL
Além do protocolo básico, existem duas variações comumente adotadas do
protocolo 2PL:
2PL conservador (ou estático) – requer que todos os itens a serem usados por
uma transação (lidos ou escritos) sejam bloqueados antes do início da transação.
Esta variação do protocolo evita que sejam gerados deadlocks.
2PL estrito – a transação não libera seus bloqueios até que tenha sido
comprometida ou abortada (diminui o grau de concorrência do sistema, mas evita
ter que desfazer transações).
http://www.cpdee.ufmg.br/documentos/PublicacoesDefesas/636/bd2.pdf