GeraProva GeraProva Provas com IA para professores do Brasil
Computação3ª sérieBNCC EM13CO02Média⏱ medio

Ao implementar um autômato baseado em eventos cujo handler concorrente incrementa uma variável compartilhada…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EM13CO02

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

Ao implementar um autômato baseado em eventos cujo handler concorrente incrementa uma variável compartilhada 'contador', qual técnica garante que nenhum incremento seja perdido?

  1. A) Proteger a seção crítica com um mutex/lock (ou operação atômica) durante o incremento.
  2. B) Confiar em um sistema de notificações para incrementar o contador.
  3. C) Usar variáveis globais sem controle para o contador.
  4. D) Implementar uma fila para armazenar eventos antes de processá-los.
  5. E) Utilizar um mecanismo de repetição para incrementar a variável.

✅ Resposta correta: alternativa A

Resolução passo a passo

  1. O problema descreve um handler concorrente que incrementa uma variável compartilhada. Quando duas threads executam contador = contador + 1 ao mesmo tempo, ambas podem ler o mesmo valor antigo e gravar o mesmo valor novo, perdendo um dos incrementos (condição de corrida).
  2. Para garantir que nenhum incremento se perca, é preciso tornar a operação de leitura, soma e escrita indivisível em relação às outras threads. Isso se faz protegendo a seção crítica com um mutex/lock, ou usando uma operação atômica (como fetch-and-add ou incremento atômico), que o hardware executa sem interrupção.
  3. Por que as outras estão erradas:
  4. B) Um sistema de notificações apenas avisa que algo aconteceu; não impede que dois handlers leiam e gravem o mesmo valor da variável.
  5. C) Variáveis globais sem controle são justamente a fonte da condição de corrida, então aumentam o risco de perda de incrementos.
  6. D) Uma fila organiza a ordem de processamento dos eventos, mas se o incremento continuar sendo feito concorrentemente sobre a mesma variável sem sincronização, a perda pode ocorrer.
  7. E) Repetir o incremento pode mascarar o problema em alguns casos, mas não garante que nenhum incremento seja perdido, pois outras threads continuam interferindo.
  8. Conclusão: a alternativa A é a correta e coincide com o gabarito oficial.

💡 Dica: Considere as técnicas de sincronização de threads.

Alternativa por alternativa

A Correta

Mutexes ou operações atômicas asseguram exclusão mútua ou atomicidade, impedindo condições de corrida que causariam perda de atualizações em variáveis compartilhadas.

B Erradaerro: Conceituala que mais engana

Acredita que notificar ou coordenar eventos evita a corrida sobre a variável, quando a notificação não sincroniza o acesso de leitura e escrita ao dado.

Por que engana: O aluno pode confundir a necessidade de proteção da seção crítica com a ideia de que notificações ou variáveis globais podem resolver o problema de concorrência.

C Erradaerro: Conceitual

Supõe que compartilhar a variável livremente é aceitável, sem perceber que é exatamente o acesso não controlado que gera a condição de corrida.

D Erradaerro: Conceitual

Imagina que enfileirar eventos resolve a concorrência, ignorando que o incremento em si pode ser executado em paralelo por diferentes threads sobre a mesma variável.

E Erradaerro: Senso comum

Pensa que repetir a operação compensa eventuais perdas, sem perceber que a repetição não impede que outra thread sobrescreva o valor no meio do processo.

Raio-X da questão

Dificuldade Média
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✍️ direta🧩 desafio
🎯 Conceito central

sincronização de threads

📌 Objetivo

avaliacao

🧱 Pré-requisitos

sincronização de threads · seção crítica

📚 Reveja

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

⚠️ Erro mais comum

O aluno pode confundir a necessidade de proteção da seção crítica com a ideia de que notificações ou variáveis globais podem resolver o problema de concorrência.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

tomada_decisao

🏫 Contexto

abstrato

Questões parecidas com resolução

Todas as questões de [CONFERIR] Construir soluções baseadas no uso de algoritmos e conceitos da Computação para resolver problemas, avaliando suas qualidades e melhorando-as.

🔎 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.