Existem dois tipos de prevenção de deadlock quando se utiliza timestamp para controle de concorrência: ESPERAR-MORRER e FERIR-ESPERAR. Suponha que as transações T1, T2 e T3 tenham timestamps 5, 10 e 15, respectivamente. No esquema ESPERAR-MORRER, se T3 solicitar um item de dado mantido por T2, então _____ será desfeita. Já no esquema FERIR-ESPERAR, se T1 solicitar um item de dado mantido por T2, então o item de dado será liberado de _____, e _____ será desfeita. Se T3 solicitar um item mantido por T2, então _____ esperará. Assinale a alternativa que preenche, correta e respectivamente, as lacunas do trecho acima.
- A)T3 – T2 – T2 – T3
Correta: em wait-die, T3 morre ao pedir item de T2; em wound-wait, T2 é desfeita quando T1 pede o item, e T3 espera.
- B)T1 – T2 – T3 – T1
Errada: inverte a lógica das idades e troca quem espera e quem é abortada nos dois esquemas.
- C)T2 – T3 – T3 – T2
Errada: atribui a liberação e a espera de forma incompatível com a regra dos timestamps.
- D)T3 – T1 – T1 – T3
Errada: mistura os papéis de T1 e T3, contrariando o comportamento esperado em wait-die e wound-wait.
- E)T1 – T3 – T1 – T2
Errada: coloca T1 e T3 nas lacunas fora da ordem correta, como se a transação mais nova tivesse prioridade.
Gabarito: A
Em controle de concorrência com timestamps, a ideia é simples: o número menor representa a transação mais antiga, e isso manda no jogo. No esquema ESPERAR-MORRER (wait-die), se uma transação mais nova pede um item que está com uma mais velha, ela nao fica esperando: ela é desfeita. Se for a mais velha pedindo algo da mais nova, ela pode esperar. Já no FERIR-ESPERAR (wound-wait), acontece o inverso: a transação mais velha “fere” a mais nova, fazendo a mais nova ser abortada; se a pedinte for mais nova, ela espera. Aplicando aos dados da questão: T1 tem timestamp 5, T2 tem 10 e T3 tem 15. No ESPERAR-MORRER, T3 pede um item mantido por T2. Como T3 é mais nova que T2, ela nao espera: ela é desfeita. Esse primeiro espaço, portanto, é T3. No FERIR-ESPERAR, se T1 pedir um item mantido por T2, T1 é mais antiga. Logo, T2 é que deve liberar o item, porque será desfeita. Depois, se T3 pedir um item mantido por T2, T3 é mais nova que T2, então T3 espera. Por isso, a sequência correta é: T3 - T2 - T2 - T3, que corresponde à alternativa A. Esse é um tema clássico de prova: basta lembrar que no wait-die a transação nova morre, e no wound-wait a transação velha fere.