Você está na página 1de 3

Race Condition (Condição de corrida): Uma condição de

corrida é uma falha em um sistema ou processo em que o


resultado do processo é inesperadamente dependente da
sequência ou sincronia de outros eventos. Apesar de ser
conhecido em português por 'condição de corrida' uma
tradução melhor seria 'condição de concorrência' pois o
problema está relacionado justamente ao gerenciamento da
concorrência entre processos teoricamente simultâneos. O
fenômeno pode ocorrer em sistemas eletrônicos,
especialmente em circuitos lógicos, e em programas de
computador, especialmente no uso de multitarefa ou
computação distribuída.
Deadlock (Interbloqueio, blocagem, impasse): No contexto
de sistemas operacionais (SO), refere-se a uma situação em
que ocorre um impasse, e dois ou mais processos ficam
impedidos de continuar suas execuções, ou seja, ficam
bloqueados, esperando uns pelos outros. Trata-se de um
problema bastante estudado em sistemas operacionais e
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 outro processo, o qual, por sua vez, aguarda a liberação
de outro recurso alocado ou dependente do primeiro
processo.
Livelock: Na computação simultânea, um impasse é um
estado no qual cada membro de um grupo de ações está
aguardando que outro membro libere um bloqueio. Um
livelock é semelhante a um impasse, exceto que os estados
dos processos envolvidos no livelock mudam
constantemente um em relação ao outro, nenhum
progredindo. Livelock é um caso especial de inanição de
recursos; a definição geral afirma apenas que um processo
específico não está progredindo.
Um exemplo real de livelock ocorre quando duas pessoas se
encontram em um corredor estreito, e cada uma tenta ser
educada movendo-se para o lado para deixar o outro passar,
mas elas acabam balançando de um lado para o outro sem
progredir, porque ambas se movem repetidamente da
mesma maneira ao mesmo tempo. Livelock é um risco em
alguns algoritmos que detectam e se recuperam de um
conflito. Se mais de um processo executar uma ação, o
algoritmo de detecção de deadlock poderá ser acionado
repetidamente. Isso pode ser evitado, garantindo que
apenas um processo (escolhido aleatoriamente ou por
prioridade) tome medidas.
Concorrência versus Paralelismo: A programação
concorrente, ou escrever software concorrente, pode ser
bastante complicado. Primeiro devem ser identificados
aspectos concorrentes no problema a ser resolvido. Depois,
o programa deve ser capaz de gerenciar como os dados são
acessados e compartilhados entre as tarefas. Portanto a
interação, comunicação e a coordenação entre as tarefas
são as questões centrais de um sistema concorrente.
Quanto ao paralelismo, seria o tratamento de uma tarefa
complexa, que é dividida em um conjunto de tarefas
menores relacionadas que cooperam entre si para a
realização da tarefa maior, e são processadas de maneira
independente e simultânea em múltiplas unidades de
processamento (cores e CPU’s). A programação paralela é a
aplicação da concorrência. Não existe paralelismo sem
concorrência.
Não existe a base de hardware instalada necessária hoje
para alavancar o desenvolvimento em larga escala de
sistemas concorrentes. Claro que é possível o
desenvolvimento de software em paradigma concorrente
para um processador com apenas um núcleo, porém não é aí
que o paradigma é mais bem utilizado. Além disso, é
necessário um maior grau de conhecimento e treinamento
do desenvolvedor para chegar a bons resultados sem
problemas de controle dos threads. As linguagens de
programação oferecem bibliotecas e compiladores para o
desenvolvimento, porém não há grande interesse na
mudança de paradigma, ainda é difícil hoje encontrar
pessoas que deixem as facilidades do paradigma
estruturado. A programação concorrente exige tempo,
investimento em treinamento, depuração e testes maiores,
pois existem mais situações a prever e maiores
possibilidades de erros ou conflitos nas aplicações devido à
necessidade de sincronia perfeita entre os threads.

Você também pode gostar