Baixe o app para aproveitar ainda mais
Prévia do material em texto
Threads, acessando a memória compartilhada e seus desafios com: Race conditions, DeadLock e LiveLock Sobre a concorrência em acessar a memória do computador, um “deadlock” é um estado em que cada membro de um grupo de ações está esperando que algum outro membro libere um bloqueio. Um “livelock” é semelhante a um deadlock, exceto que os estados dos processos envolvidos no livelock mudam constantemente entre si, nenhum progredindo. Livelock é um caso especial de escassez de recursos; a definição geral afirma apenas que um processo específico não está progredindo. Um exemplo do mundo real de livelock podemos usar o seguinte exemplo, de quando duas pessoas se encontram em um corredor estreito, e cada uma tenta ser educada, movendo-se de um lado para o lado para deixar a outra passar, mas elas acabam movendo-se juntas de um lado para o outro sem fazer qualquer progresso porque ambas se movem repetidamente da mesma forma ao mesmo tempo. Livelock é um risco com alguns algoritmos que detectam e se recuperam de deadlock. Se mais de um processo entrar em ação, o algoritmo de detecção de conflito pode ser disparado repetidamente. Isso pode ser evitado garantindo que apenas um processo (escolhido aleatoriamente ou por prioridade) execute a ação. Sobre Race Conditions, entende-se que é uma situação que pode ocorrer em todos os casos onde um determinado recurso computacional tem acesso concorrente (mesmo não aparente). O melhor resumo é que a situação precisa contar que algo está em determinado estado e vai fazer algo pressupondo este estado, mas o estado muda por outra execução entre o tempo que você obteve o estado e o momento que vai executar algo nele. Em outros palavras, é a situação onde o tempo que os eventos ocorrem podem influenciar sua execução. Uma das formas mais “fáceis” de exemplificar esse estado de “corrida de condições” é com o banco de dados. Vamos supor que a pessoa irá verificar uma tabela usando o SELECT para verificar se um dado já existe e depois um INSERT se não existir, nesse caso o ideal seria o UPDATE, pois, com o INSERT a concorrência é bem maior.
Compartilhar