Em programação paralela, o principal meio de comunicação entre threads/processos é a memória compartilhada. Qual das técnicas a seguir pode ser utilizada para controlar a concorrência em memória compartilhada?
Questão
Em programação paralela, o principal meio de comunicação entre threads/processos é a memória compartilhada. Qual das técnicas a seguir pode ser utilizada para controlar a concorrência em memória compartilhada?
Alternativas
a) Particionamento de dados.
b) Particionamento de tarefas.
c) Heartbeats.
d) Locks.
e) Troca de mensagens.
Explicação
Em programação paralela com memória compartilhada, múltiplas threads/processos podem acessar simultaneamente as mesmas regiões de memória, o que pode gerar condições de corrida e inconsistência de dados.
Uma forma clássica de controlar a concorrência (isto é, garantir exclusão mútua ou sincronização no acesso a uma região crítica) é usar locks (travas), como mutexes e semáforos. Eles permitem que apenas uma thread por vez acesse um recurso compartilhado, ou coordenam a ordem de execução em seções críticas.
Analisando as alternativas:
- a) Particionamento de dados: ajuda a reduzir contenção (cada thread trabalha em uma parte), mas não é um mecanismo direto de controle de concorrência quando ainda existe compartilhamento.
- b) Particionamento de tarefas: é estratégia de paralelização, não um mecanismo de sincronização de acesso à memória.
- c) Heartbeats: técnica de monitoramento/diagnóstico (ex.: detecção de falhas), não controle de concorrência.
- d) Locks: mecanismo direto para sincronização/exclusão mútua em memória compartilhada.
- e) Troca de mensagens: é modelo típico de comunicação em memória distribuída (message passing), não o controle de concorrência em memória compartilhada.
Alternativa correta: (d).