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

Conteúdo apagado Conteúdo adicionado
Alch Bot (discussão | contribs)
Checkwiki: E64 +fixes
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. Apesar disso, comoo ambosresultado final da operação também é indefinido e dependerá da ordem em que os processos realizamterminarem oa saquesua execução, sendo que, o balançoprocesso acabaque ficandoexecutar coma valorlinha negativo,x umpor resultadoúltimo queterá o seu resultado nãogravado deveriaem acontecerdefinitivo. 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.