Programação concorrente: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Linha 32:
</source>
 
Suponha que <code>balanco = 500</code>, e dois [[processo (informática)|processo]]s concorrentes realizam a chamada <code>saque(300)</code> e <code>saque(350)</code>, respectivamente. Se em ambas as operações a linha 3 é executada antes da linha 5 do processo concorrente, ambas as operações irão deduzir que o balanço é maior que a quantia a ser sacada, e a execução irá proceder subtraindo os valores a serem sacados em ambos os processos. ApesarAlém disso, o resultado final da operação também é indefinido e dependerá da ordem em que os processos terminarem a sua execução, sendo que, o processo que executar a linha x5 por último terá o seu resultado gravado em definitivo. Esse tipo de problema com recursos compartilhados requer o uso de controles de concorrência, ou algoritmos não bloqueantes.
 
Como sistemas concorrentes necessitam a utilização de recursos compartilhados, a programação concorrente geralmente requer o uso de algum método de árbitro, um elemento neutro, para coordenar o acesso a tais recursos. Isso introduz a possibilidade do aparecimento de problemas com decisões não determinísticas, apesar de que o desenvolvimento cuidadoso de árbitros pode reduzir a probabilidade de tais situações aparecerem.