Sobes.tech
Junior — Middle

Que consequências podem esperar-se se, no modo Go, uma goroutine usar vários Readers e outra um Writer que bloqueia a execução?

sobes.tech IA

Resposta da IA

Se em modo Go (por exemplo, ao usar sync.RWMutex), uma goroutine usa vários Readers e outra um Writer, que bloqueia a execução, podem ocorrer as seguintes consequências:

  • A leitura não bloqueia outras leituras: várias goroutines podem manter simultaneamente um lock de leitura, permitindo leitura paralela.

  • A escrita bloqueia a leitura e outras escritas: quando um Writer tenta obter um write lock, ele aguardará até que todos os Readers atuais liberem o lock.

  • O Writer bloqueia os novos Readers: após o Writer começar a esperar, novos Readers não poderão obter um read lock para evitar "captura" de recurso pelos leitores.

  • Possível bloqueio (starvation): se novos Readers aparecerem constantemente, o Writer pode esperar por um longo tempo, levando a atrasos.

  • Possíveis deadlocks podem ocorrer se uma goroutine com um write lock tentar obter um read lock ou vice-versa.

Assim, ao usar múltiplos Readers e um único Writer simultaneamente, é importante projetar corretamente a lógica de sincronização para evitar bloqueios e garantir acesso correto aos dados.