Deadlock
Um deadlock é uma condição em que um programa não consegue acessar um recurso de que precisa para continuar. Quando um aplicativo ativo entra em um deadlock, ele pode "travar" ou deixar de responder.
Recursos, como dados salvos ou armazenados em cache, podem ser bloqueados quando acessados por um processo específico dentro de um programa. Bloquear os dados impede que outros processos os substituam prematuramente. Se um processo ou uma consulta precisar acessar dados bloqueados, mas o processo que os bloqueou não os liberar, poderá ocorrer um deadlock.
Por exemplo, a situação a seguir causará um deadlock entre dois processos:
- O processo 1 solicita o recurso B ao processo 2.
- O recurso B fica bloqueado enquanto o processo 2 está em execução.
- O processo 2 precisa do recurso A do processo 1 para concluir sua execução.
- O recurso A fica bloqueado enquanto o processo 1 está em execução.
O resultado é que o processo 1 e o processo 2 ficam esperando um pelo outro terminar. Como nenhum dos processos pode continuar até que o outro seja concluído, um deadlock é criado.
Evitando deadlocks
Desenvolvedores podem evitar deadlocks evitando condições de bloqueio na lógica de programação. Por exemplo, em vez de fazer com que dois processos dependam um do outro, o código-fonte pode ser escrito de modo que cada thread termine antes que outra thread precise de seus recursos. Ao garantir que os dados estejam acessíveis quando necessário, os programadores podem proteger seus aplicativos contra travamentos ou falhas.
NOTE: Deadlocks também podem ocorrer quando duas ou mais consultas são executadas em um banco de dados. Bancos de dados transacionais bloqueiam os registros ativos, impedindo que outras consultas os acessem. Se um processo não puder acessar um registro bloqueado, poderá ocorrer um deadlock de banco de dados.
Teste seus conhecimentos