Ao paralelizar processamento por linhas de uma matriz de registros e atualizar uma variável global 'soma'…
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
Ao paralelizar processamento por linhas de uma matriz de registros e atualizar uma variável global 'soma', qual mecanismo evita condições de corrida?
- A) Criar uma cópia da variável 'soma' para cada thread.
- B) Ignorar a atualização de 'soma' durante processamento.
- C) Executar a atualização de 'soma' em ordem sequencial apenas.
- D) Atualizar 'soma' diretamente sem proteção.
- E) Proteger a atualização com seção crítica (mutex) ou usar operação atômica para 'soma'.
✅ Resposta correta: alternativa E
Resolução passo a passo
- A condição de corrida ocorre quando duas ou mais threads leem e escrevem a mesma variável compartilhada ao mesmo tempo, e o resultado final depende da ordem de execução. Aqui, todas as linhas da matriz atualizam a variável global 'soma', então existe disputa pelo mesmo endereço de memória.
- Para evitar isso, é preciso garantir exclusão mútua ou atomicidade na atualização. A seção crítica protegida por mutex faz com que apenas uma thread por vez execute a soma. Uma operação atômica (como um incremento atômico do hardware ou da biblioteca) faz a leitura, a soma e a escrita acontecerem como uma única operação indivisível. Ambas resolvem o problema, por isso a alternativa E é a correta.
- A alternativa A até evita a corrida se cada thread acumular em sua cópia e os resultados forem combinados no fim (redução). Porém, o enunciado fala em atualizar a variável global 'soma' e não menciona essa etapa de combinação, então a resposta mais direta e geral é a E. Vale notar essa ambiguidade, mas ela não muda a conclusão.
- Por que as outras estão erradas: a B descarta o cálculo, o que contraria o objetivo de somar os registros; a C força ordem sequencial e anula o ganho da paralelização, embora evite a corrida; a D mantém a atualização sem proteção, exatamente o que causa a corrida.
- Conclusão: a alternativa correta é a E, que coincide com o gabarito oficial.
💡 Dica: Considere os mecanismos de sincronização em programação paralela.
Alternativa por alternativa
Acredita que dar uma cópia de 'soma' a cada thread elimina o conflito automaticamente, sem perceber que é preciso combinar os resultados parciais ao final para obter a soma global.
Imagina que pular a atualização de 'soma' resolve a concorrência, sem perceber que a variável precisa refletir todos os registros processados.
Entende que tornar a execução sequencial é a única forma segura de evitar corrida, ignorando que mecanismos de sincronização permitem manter o paralelismo.
Por que engana: O aluno pode confundir a necessidade de proteger a variável global com a ideia de que ignorá-la ou criar cópias resolveria o problema de concorrência.
Confunde paralelismo com ausência de problemas e acha que atualizar a variável diretamente é seguro, sem perceber que threads podem sobrescrever os valores umas das outras.
Mutexes ou operações atômicas garantem exclusão mútua ao atualizar variáveis compartilhadas, evitando resultados incorretos por interleaving.
Raio-X da questão
condições de corrida
avaliacao
paralelismo em programação · variáveis globais
Revisar mecanismos de sincronização em programação paralela.
O aluno pode confundir a necessidade de proteger a variável global com a ideia de que ignorá-la ou criar cópias resolveria o problema de concorrência.
ciencia_tecnologia
pensamento_critico
abstrato
Questões parecidas com resolução
- 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…
- Para tornar um algoritmo reutilizável e seguro para execução paralela, qual prática relacionada a variáveis e efeitos…
- Ao implementar um autômato baseado em eventos cujo handler concorrente incrementa uma variável compartilhada 'contador'…
- Uma equipe dividiu um programa em várias threads para executar tarefas ao mesmo tempo. Durante os testes, duas threads…
- 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
