Questão nº 39
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 39)
Um programador está desenvolvendo um sistema de controle de estoque no qual múltiplos threads precisam atualizar a quantidade de produtos simultaneamente. Para garantir que a quantidade de produtos seja atualizada corretamente sem causar inconsistências, ele precisa utilizar uma primitiva de sincronização específica.
Considerando-se esse contexto, qual é a propriedade que caracteriza unicamente a primitiva de sincronização chamada ‘mutex’ e que a qualifica para garantir a condição desejada?
- ABloquear threads até que uma condição específica seja verdadeira.
- BCombinar exclusão mútua e variáveis de condição para gerenciar o acesso a recursos compartilhados.
- CGarantir que apenas um thread possa acessar o recurso de cada vez. (alternativa correta)
- DPermitir múltiplos threads acessarem o recurso até um limite definido.
- ESincronizar a execução de múltiplos threads em pontos específicos do código.
Resposta comentada
Gabarito Alternativa C
Mutex é uma abreviação de mutual exclusion (exclusão mútua). Ele funciona como uma chave de banheiro: só uma pessoa entra por vez, usa o recurso e devolve a chave. Enquanto um thread segura o mutex, qualquer outro thread que tente pegá-lo fica bloqueado esperando, garantindo que a operação de atualização do estoque seja atômica (sem interrupção no meio).
- (A) Incorreta: Isso descreve uma variável de condição, que faz o thread esperar até que um sinal específico ocorra, não um mutex. A pegadinha aqui é confundir "esperar por condição" com "esperar por liberação do lock".
- (B) Incorreta: Essa é a definição de um monitor (ou de um semáforo com contador), que encapsula um mutex junto com variáveis de condição. O mutex sozinho não gerencia condições, apenas exclusão mútua.
- (C) Correta: Exatamente essa é a essência do mutex: garantir que apenas um thread acesse o recurso crítico por vez. É a propriedade que impede dois threads de escreverem no estoque simultaneamente, evitando a condição de corrida.
- (D) Incorreta: Isso descreve um semáforo contador (ou semáforo com valor N), que permite até N threads acessarem o recurso. O mutex só permite 1.
- (E) Incorreta: Isso descreve uma barreira (ou rendezvous), usada para sincronizar threads em um ponto de encontro, não para proteger um recurso compartilhado. A armadilha aqui é a palavra "sincronizar", que é genérica, mas a função específica do mutex é exclusão, não coordenação de fases.
Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Desenvolvimento) (Caderno Prova 3). Reproduzida para fins de estudo.