1 - Sincronização de Thread

Quando múltiplas threads compartilham um objeto e ele é modificado por uma ou várias delas, podem ocorrer resultados indeterminados (como veremos nos exemplos mais adiante), a menos que o acesso ao objeto compartilhado seja gerenciado adequadamente.

Se uma thread estiver atualizando um objeto compartilhado e outra thread também tentar atualizá-lo no mesmo instante, não se pode garantir a integridade do objeto em questão, ou seja, não é clara a atualização de qual thread entrará em vigor. Isso é conhecido como condição de corrida.

Quando isso acontecer, não se pode confiar no comportamento do programa, uma vez que ele poderá produzir tantos resultados corretos quanto resultados errados, e da pior maneira possível, esporadicamente.

Isso significa que o programa às vezes funciona e às vezes não. Além disso, essa oscilação entre funcionar e não funcionar não possui um padrão de comportamento, o que torna a descoberta do problema algo ainda mais complexo.

O referido problema pode ser resolvido fornecendo a somente uma thread, por vez, o acesso ao conjunto de instruções compartilhadas (região/seção crítica), ou seja, acesso exclusivo à parte do código que manipula o objeto compartilhado.
Copyright © 2016 AIEC.