GeraProva GeraProva Provas com IA para professores do Brasil
Computação8º anoBNCC EF08CO05Difícil⏱ medio

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

Habilidade BNCC EF08CO05

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?

  1. A) Confiar na ordem em que as threads foram criadas para organizar os acessos.
  2. B) Usar variáveis globais para facilitar a comunicação entre as threads.
  3. C) Permitir que todas as threads alterem a variável ao mesmo tempo.
  4. D) Proteger o acesso à variável compartilhada usando mutex ou lock.
  5. E) Aumentar o número de threads para distribuir melhor as tarefas do programa.

✅ Resposta correta: alternativa D

Resolução passo a passo

  1. 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.
  2. 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.
  3. 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.
  4. 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

A Erradaerro: Conceituala que mais engana

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.

B Erradaerro: Conceitual

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.

C Erradaerro: Conceitual

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.

D Correta

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.

E Erradaerro: Senso comum

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

Dificuldade Difícil
Bloom Analisar
Leitura medio
Discriminação alto
Peso pedagógico alto
Autonomia do enunciado completo
Cobertura da habilidade unica
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 desafio
🎯 Conceito central

variáveis compartilhadas

📌 Objetivo

avaliacao

🧱 Pré-requisitos

condição de corrida · sincronização de threads

📚 Reveja

Revisar técnicas de sincronização em programação paralela.

⚠️ Erro mais comum

O aluno pode acreditar que a linguagem de programação gerencia automaticamente as variáveis compartilhadas, ignorando a necessidade de controle explícito.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

cientifico

Questões parecidas com resolução

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

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.