SóProvas


ID
73810
Banca
FGV
Órgão
SEFAZ-RJ
Ano
2008
Provas
Disciplina
Banco de Dados
Assuntos

No funcionamento de um sistema de gerenciamento de banco de dados, uma situação de falha ocorre quando dois usuários tentam alterar, simultaneamente, um mesmo registro. Por exemplo, no caso de dois clientes de uma empresa de cartões de crédito tentarem realizar, num dado instante, a liquidação de um mesmo boleto da mesma fatura, um deles receberá uma mensagem de falha.

A situação descrita é conhecida por:

Alternativas
Comentários
  • Deadlock (blocagem, impasse), no contexto do sistemas operacionais (SO), caracteriza uma situação em que ocorre um impasse e dois ou mais processos ficam impedidos de continuar suas execuções, ou seja, ficam bloqueados. Trata-se de um problema bastante estudado no contexto dos Sistemas Operacionais, assim como em outras disciplinas, como banco de dados, pois é inerente à própria natureza desses sistemas.O deadlock ocorre com um conjunto de processos e recursos não-preemptíveis, onde um ou mais processos desse conjunto está aguardando a liberação de um recurso por um outro processo que, por sua vez, aguarda a liberação de outro recurso alocado ou dependente do primeiro processo.A definição textual de deadlock normalmente, por ser muito abstrata, é mais difícil de se compreender do que a representação por grafos, que será resumida mais adiante. No entanto, algumas observações são pertinentes:O deadlock pode ocorrer mesmo que haja somente um processo no SO, considerando que este processo utilize múltiplos threads e que tais threads requisitem os recursos alocados a outros threads no mesmo processo; O deadlock independe da quantidade de recursos disponíveis no sistema; Normalmente o deadlock ocorre com recursos como dispositivos, arquivos, memória, etc. Apesar da CPU também ser um recurso para o SO, em geral é um recurso facilmente preemptível, pois existem os escalonadores para compartilhar o processador entre os diversos processos, quando trata-se de um ambiente multitarefa. Um exemplo onde erros de deadlock ocorrem é no banco de dados. Suponha que uma empresa tenha vários vendedores e vários pontos de venda/caixas. O vendedor A vendeu 1 martelo e 1 furadeira. O sistema então solicita o travamento do registro da tabela ESTOQUE que contém o total de martelos em estoque e em seguida solicita o travamento do registro que contém o total de furadeiras em estoque. De posse da exclusividade de acesso aos dois registros, ele lê a quantidade de martelos, subtrai 1 e escreve de novo no registro, o mesmo com o registro de furadeiras. Observe, no entanto que existem diversos caixas operando simultaneamente de forma que se algum outro caixa naquele exato instante estiver vendendo um furadeira, ele ficará de aguardando a liberação do registro das furadeiras para depois alterá-lo. Note que ele só altera os registro depois que for dada exclusividade para ele de TODOS os recursos que ele precisa, ou seja, de todos os registro. Suponha agora que em outro caixa a venda foram vendidos 1 furadeira e 1 martelo e que o outro caixa solicitou o travamento do registro com a quantidade de furadeiras e agora quer o acesso ao de martelos, no entanto o de martelos está travado para o primeiro caixa. Nenhum deles devolve o recurso (registro) sobre o qual tem exclusividade e também não consegue acesso ao outro registro que falta para terminar a operação. Isto é um deadlock.
  • Achei a questão um pouco mal formulada. Marquei "Crashing" meio sem achar que teria uma boa resposta. Podemos ver, pelo comentário extenso do outro colega, que a situação de deadlock deixaria os dois processos bloqueados, cada qual aguardando a liberação de um recurso bloqueado pelo outro. Pelo enunciado isso claramente não foi o que ocorreu, pois ambos foram liberados, um com sucesso e outro com uma falha.

    Uma coisa que pode levar a este resultado são algoritimos de prevenção de deadlocks, que de fato não deixam que eles ocorram. A aplicação que recebeu a falha foi abortada por tal algoritimo, seja ele qual for (wait-for, wound-wait, timeout). Ao ser abortada, creio que pode se dizer que a transação sofreu um "crash".

    Enfim, deadlock, na minha visão talvez ainda pouco madura do assunto, é a situação de bloqueio mútuo, que não é descrita na questão.

  • Concordo com o Eduardo, para mim isso é apenas um lock. Nada de deadlock.
  • Concordo com os dois ultimos comentarios, realmente achei que fosse crashing, não me parecia deadlock pelos mesmos motivos dos amigos acima.


  • não é deadlock, deadlock os dois ficariam "presos", quando ele diz que um deles receberá mensagem nos faz inferior que o outro foi bem sucedido. Sendo assim, foi apenas um write-lock (eXclusive) que bloqueou o registro fazendo com que a segunda operação falhasse. Bom, eu pelo menos acho isso.