Dois handlers de evento atualizam simultaneamente a variável compartilhada 'contador' sem sincronização. Qual…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Explorar e construir a solução de problemas por meio de refinamentos, utilizando diversos níveis de abstração desde a especificação até a implementação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Dois handlers de evento atualizam simultaneamente a variável compartilhada 'contador' sem sincronização. Qual problema isso causa e qual solução técnica é adequada?
- A) Causa erros lógicos; a solução é usar variáveis globais em vez de compartilhadas.
- B) Causa problemas de desempenho; solução é duplicar a variável para cada handler.
- C) Causa deadlock; a solução é aumentar a quantidade de memória disponível.
- D) Causa condição de corrida; corrigir com sincronização (locks/mutex) ou operações atômicas.
- E) Causa perda de dados; solução é reduzir o tamanho da variável compartilhada.
✅ Resposta correta: alternativa D
Resolução passo a passo
- Identifique o cenário. Dois handlers de evento (funções chamadas em resposta a eventos) escrevem na mesma variável 'contador' ao mesmo tempo, sem nenhum mecanismo de coordenação.
- Identifique o problema. Quando duas execuções concorrentes fazem leitura, incremento e escrita sobre a mesma variável, as operações podem se intercalar. Por exemplo, ambas leem o valor 5, ambas calculam 6 e ambas gravam 6, quando o correto seria 7. Esse fenômeno chama-se condição de corrida (race condition): o resultado depende da ordem de execução, que é imprevisível.
- Identifique a solução adequada. Para proteger a seção crítica usam-se locks ou mutex, que garantem que apenas uma execução por vez acesse a variável, ou operações atômicas, que executam leitura e escrita como uma única etapa indivisível.
- Verifique as demais alternativas.
- A: erros lógicos existem, mas o nome técnico do problema é condição de corrida, e usar variáveis globais não resolve nada, pois a variável continuaria compartilhada e sem proteção.
- B: não é questão de desempenho; duplicar a variável para cada handler faria cada um manter um contador próprio, o que quebra a contagem total.
- C: deadlock ocorre quando execuções se bloqueiam mutuamente esperando recursos, e não é o efeito típico desse cenário; aumentar memória não corrige a concorrência.
- E: não há perda de dados por tamanho da variável; reduzir o tamanho não impede a intercalação das operações.
- Conclusão. A alternativa correta é a D, que identifica corretamente a condição de corrida e apresenta a solução técnica com sincronização ou operações atômicas. O gabarito oficial está correto.
💡 Dica: Considere as implicações da concorrência em programação.
Alternativa por alternativa
O aluno percebe que há erro lógico, mas acredita que tornar a variável global resolve o problema, sem entender que o compartilhamento é justamente a origem da corrida.
Por que engana: Confundir a condição de corrida com deadlock, acreditando que o problema é a falta de memória.
O aluno associa concorrência a lentidão e imagina que o problema é de desempenho, achando que duplicar a variável eliminaria a interferência entre handlers.
O aluno confunde condição de corrida com deadlock e acredita que o problema é falta de recursos, por isso propõe aumentar a memória disponível.
Atualizações concorrentes sem proteção podem sobrescrever resultados; locks ou operações atômicas garantem que cada atualização ocorra de forma indivisível.
O aluno supõe que o problema seja o tamanho da variável, imaginando que um valor grande demais se perde, sem considerar que a perda vem da leitura e escrita intercaladas.
Raio-X da questão
concorrência em programação
diagnostico
sincronização em programação · variáveis compartilhadas
Revisar técnicas de sincronização em programação concorrente.
Confundir a condição de corrida com deadlock, acreditando que o problema é a falta de memória.
ciencia_tecnologia
pensamento_critico
cientifico
Questões parecidas com resolução
- Ao implementar um autômato baseado em eventos cujo handler concorrente incrementa uma variável compartilhada 'contador'…
- Em um algoritmo paralelo que atualiza contadores por turma, qual prática reduz a necessidade de locks ao manipular uma…
- Em um programa com múltiplas threads que atualizam uma mesma variável compartilhada, qual mecanismo previne condições de…
- Uma equipe dividiu um programa em várias threads para executar tarefas ao mesmo tempo. Durante os testes, duas threads…
- Em sistemas que executam várias threads, o que se entende por concorrência ao acessar a mesma variável?
- Ao decompor um algoritmo paralelo que processa dados em uma rede distribuída, qual risco associado ao uso de uma…
🔎 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
