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
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?
- A) Proteger a seção crítica com um mutex/lock (ou operação atômica) durante o incremento.
- B) Confiar em um sistema de notificações para incrementar o contador.
- C) Usar variáveis globais sem controle para o contador.
- D) Implementar uma fila para armazenar eventos antes de processá-los.
- E) Utilizar um mecanismo de repetição para incrementar a variável.
✅ Resposta correta: alternativa A
Resolução passo a passo
- 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).
- 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.
- Por que as outras estão erradas:
- 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.
- 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.
- 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.
- 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.
- 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
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.
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.
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.
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.
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
sincronização de threads
avaliacao
sincronização de threads · seção crítica
Revisar técnicas de sincronização em programação concorrente.
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.
ciencia_tecnologia
tomada_decisao
abstrato
Questões parecidas com resolução
- Dois handlers de evento atualizam simultaneamente a variável compartilhada 'contador' sem sincronização. Qual problema…
- 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…
- Ao paralelizar processamento por linhas de uma matriz de registros e atualizar uma variável global 'soma', qual…
- Para tornar um algoritmo reutilizável e seguro para execução paralela, qual prática relacionada a variáveis e efeitos…
- Uma equipe dividiu um programa em várias threads para executar tarefas ao mesmo tempo. Durante os testes, duas threads…
🔎 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
