Buscar

Threads e Concorrência na Memória Compartilhada

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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.

Outros materiais