Concorrência (ciência da computação)

No mundo de hoje, Concorrência (ciência da computação) tornou-se um tema de grande relevância e interesse para uma ampla gama de pessoas. Seja pelo seu impacto na sociedade, pela sua importância no local de trabalho ou pela sua relevância na história, Concorrência (ciência da computação) captou a atenção de muitos e gerou intenso debate em vários círculos. Neste artigo exploraremos os diferentes aspectos de Concorrência (ciência da computação), analisando sua influência no passado, presente e futuro. Desde as suas origens até às suas possíveis implicações a longo prazo, mergulharemos no mundo de Concorrência (ciência da computação) para compreender melhor o seu alcance e significado.

Em ciência da computação, a concorrência ocorre quando existem dois ou mais processos executados em simultâneo; mais especificamente, o termo é utilizado quando processos disputam o acesso a recursos partilhados. Com efeito, a gestão da concorrência entre processos é a fonte de inúmeras dificuldades no desenvolvimento de software; o acesso descoordenado a um recurso (a chamada condição de corrida) induz no sistema um comportamento imprevisível.

O exemplo típico: a grande maioria dos sistemas utiliza interrupções do fluxo normal de um programa para poder realizar operações em tempo real, ou para gerir o ambiente multitarefa. Assim, enquanto um processo está a aceder a um recurso — cujo valor se traduz, por exemplo, para o número de acessos — para, por exemplo, incrementar o seu valor (que se traduz numa leitura do valor, uma soma, e uma escrita no novo valor), ao mesmo tempo que outro, para o mesmo efeito, pode ocorrer que, algures entre a leitura e a escrita do valor, o escalonador de processos interrompe o primeiro processo para permitir ao segundo uma fatia do poder computacional. Então teríamos que:

Recurso: valor 0
Processo1: lê valor=0
Processo1: incrementa valor = valor + 1
Processo2: lê valor=0
Processo2: incrementa valor = valor + 1
Processo2: escreve valor=1
Recurso: valor 1
Processo1: escreve valor=1
Recurso: valor 1

Na verdade, o valor que devia constar no recurso era 2, e não 1.

Ver também