2 Um desenvolvedor percebeu que ao executar um trecho de código múltiplas vezes com os mesmos argumentos o resultado obtido mudava a cada execução. Ao realizar a depuração do código, o desenvolvedor conseguiu finalmente detectar o problema e aplicar um mecanismo de correção. Nesse contexto, marque a opção que apresenta o problema detectado e a possível solução aplicada, respectivamente.
a) Deadlock e variável de condição
b) Starvation e semáforo
  • Condição de corrida e spinlock
    d) Deadlock e mutex

Passo 1

O enunciado descreve um trecho de código que, ao ser executado múltiplas vezes com os mesmos argumentos, produz resultados diferentes a cada execução. Isso indica que estamos diante de um problema de concorrência em que a ordem de acesso a recursos compartilhados não está sincronizada corretamente. Para resolver, vamos recorrer aos conceitos de condição de corrida e mecanismos de sincronização de threads.

Passo 2

Quando duas ou mais threads acessam e modificam variáveis ou estruturas de dados compartilhadas sem coordenação, o resultado final depende da ordem de execução entre elas. Esse fenômeno é chamado de condição de corrida (race condition) e é exatamente o que causa a variabilidade dos resultados observada pelo desenvolvedor.

Passo 3

Para eliminar a condição de corrida, é preciso garantir exclusão mútua no acesso à seção crítica. Uma das soluções é o spinlock, que é um tipo de lock onde a thread, ao tentar obter o bloqueio, faz “busy waiting” (fica em loop testando se o recurso ficou livre) até poder entrar na seção crítica. Assim, apenas uma thread por vez modifica os dados compartilhados, impedindo resultados não determinísticos.

Passo 4

Como o problema detectado é uma condição de corrida e a solução aplicada foi um spinlock, identificamos que a alternativa correta é a letra c.

Resposta

c) Condição de corrida e spinlock

Exercícios relacionados