Uma equipe dividiu um programa em várias threads para executar tarefas ao mesmo tempo. Durante os testes, duas…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Compreender os conceitos de paralelismo, concorrência e armazenamento/ processamento distribuídos.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Uma equipe dividiu um programa em várias threads para executar tarefas ao mesmo tempo. Durante os testes, duas threads acessaram a mesma variável e, às vezes, o resultado ficou incorreto. A equipe quer diminuir esse problema. Qual prática reduz o risco de uma condição de corrida nesse programa?
- A) Confiar na ordem em que as threads foram criadas para organizar os acessos.
- B) Usar variáveis globais para facilitar a comunicação entre as threads.
- C) Permitir que todas as threads alterem a variável ao mesmo tempo.
- D) Proteger o acesso à variável compartilhada usando mutex ou lock.
- E) Aumentar o número de threads para distribuir melhor as tarefas do programa.
✅ Resposta correta: alternativa D
Resolução passo a passo
- A questão descreve um problema clássico de concorrência: duas threads acessam a mesma variável e o resultado às vezes sai errado. Isso é uma condição de corrida, que ocorre quando o resultado depende da ordem imprevisível em que as threads executam operações sobre dados compartilhados.
- Para reduzir esse risco, é preciso garantir que apenas uma thread por vez acesse a região crítica, ou seja, o trecho que lê e altera a variável compartilhada. Isso é feito com mecanismos de exclusão mútua, como mutex ou lock. Ao adquirir o lock antes de acessar a variável e liberá-lo depois, as operações deixam de se intercalar de forma perigosa.
- Por que as outras estão erradas: A) depender da ordem de criação não garante nenhuma ordem de execução, pois o escalonador do sistema operacional decide quando cada thread roda; B) variáveis globais aumentam o compartilhamento sem controle, o que agrava a condição de corrida em vez de reduzi-la; C) permitir alterações simultâneas é exatamente a causa do problema; E) mais threads aumentam a concorrência sobre a mesma variável e tendem a piorar o risco, sem resolver a sincronização.
- Conclusão: a alternativa correta é a D, que coincide com o gabarito oficial.
💡 Dica: Considere as práticas de sincronização de threads.
Alternativa por alternativa
O aluno acredita que a ordem de criação das threads determina a ordem de execução e, assim, organiza os acessos à variável.
Por que engana: O aluno pode acreditar que a linguagem de programação gerencia automaticamente as variáveis compartilhadas, ignorando a necessidade de controle explícito.
O aluno acha que facilitar a comunicação com variáveis globais ajuda a evitar conflitos, sem perceber que o compartilhamento sem controle aumenta a chance de corrida.
O aluno entende que permitir alterações simultâneas agiliza o programa, sem perceber que o acesso concorrente sem controle é justamente a causa da condição de corrida.
Mutex e locks controlam o acesso aos dados compartilhados, permitindo que apenas uma thread por vez realize uma operação que não deve ocorrer simultaneamente com outra.
O aluno pensa que mais threads distribuem melhor o trabalho e, portanto, resolvem o problema, sem notar que mais threads sobre a mesma variável aumentam a concorrência e o risco.
Raio-X da questão
variáveis compartilhadas
avaliacao
condição de corrida · sincronização de threads
Revisar técnicas de sincronização em programação paralela.
O aluno pode acreditar que a linguagem de programação gerencia automaticamente as variáveis compartilhadas, ignorando a necessidade de controle explícito.
ciencia_tecnologia
pensamento_critico
cientifico
Questões parecidas com resolução
- Para tornar um algoritmo reutilizável e seguro para execução paralela, qual prática relacionada a variáveis e efeitos…
- Em um programa com múltiplas threads que atualizam uma mesma variável compartilhada, qual mecanismo previne condições de…
- Em um algoritmo paralelo que atualiza contadores por turma, qual prática reduz a necessidade de locks ao manipular uma…
- Em sistemas que executam várias threads, o que se entende por concorrência ao acessar a mesma variável?
- Ao decompor um algoritmo que atualiza a mesma variável de estado em várias subtarefas, que estratégia reduz efeitos…
- Dois handlers de evento atualizam simultaneamente a variável compartilhada 'contador' sem sincronização. Qual problema…
Todas as questões de Sistemas distribuídos e internet - Fundamentos de sistemas distribuídos
🔎 Procurar outra questão
Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.
Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog
