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

Conteúdo apagado Conteúdo adicionado
Gunnex (discussão | contribs)
Linha 32:
</source>
 
Suponha que <code>balanco = 500</code>, e dois processos[[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. Apesar disso, como ambos os processos realizam o saque, o balanço acaba ficando com valor negativo, um resultado que não deveria acontecer. 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.