"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O uso de mutex em Golang e explicação detalhada

O uso de mutex em Golang e explicação detalhada

Postado em 2025-04-19
Navegar:430

Durante o desenvolvimento do LiveAPI, uma ferramenta de geração de documentação da API automática, eu precisava implementar um mecanismo de fila robusto que escalou com base no número de núcleos de máquina de servidor. Isso foi crucial para impedir o uso excessivo de recursos (memória e CPU) que poderia levar à fome de recursos, falhas e uma má experiência do usuário.

Neste artigo, explicarei como utilizei mutexes em Golang para enfrentar este desafio.

o que é um mutex?
Na programação simultânea, uma mutex (exclusão mútua) é um mecanismo de travamento que impede as condições de raça, garantindo que apenas uma goroutina possa acessar um recurso compartilhado por vez. É semelhante a uma chave para uma sala - apenas uma pessoa pode segurar a chave e entrar de uma só vez.

What is Mutex and How to Use it in Golang?

Uso mutex em Golang
Vamos ilustrar como um mutex pode gerenciar a execução simultânea de emprego:
O pacote de sincronização do Go fornece várias primitivas para sincronização, com o mutex sendo uma das ferramentas mais usadas.

var (
    maxConcurrentJobs int
    activeJobs        int
    jobMutex          sync.Mutex
)

Neste código, a variável ActiveJobs rastreia o número de trabalhos atualmente em execução. Como várias goroutinas podem tentar modificar essa variável simultaneamente, levando a condições de corrida, usamos um mutex para sincronizar o acesso.

// Check if we can process more jobs
jobMutex.Lock()
if activeJobs >= maxConcurrentJobs {
    jobMutex.Unlock()
    // Wait before checking again
    time.Sleep(time.Second)
    continue
}
jobMutex.Unlock()

como um mutex funciona
travando : o método Lock () adquire acesso exclusivo à seção crítica.

desbloqueio : o método desbloqueio () libera o Lock.

seção crítica : o código entre bloqueio e desbloqueio onde o recurso compartilhado ** é acessado.

tipos de mutexes em Golang
sync.mutex : este é o bloqueio de exclusão mútua básica no Go. Permite que apenas uma goroutina acesse a seção crítica por vez.

TIPO SAFECONTER STRUCT { mu sync.mutex Conde int }
type SafeCounter struct {
    mu    sync.Mutex
    count int
}

sync.rwmutex : este é um leitor/escritor mutex que permite que vários leitores acessem o recurso compartilhado simultaneamente, mas apenas um escritor de cada vez.

var rwmutex sync.rwmutex // Métodos do leitor rwmutex.rlock () // bloqueia para leitura rwmutex.runlock () // desbloquear para leitura // Métodos de escritor rwmutex.lock () // bloqueia para escrever rwmutex.unlock () // desbloquear para escrever
type SafeCounter struct {
    mu    sync.Mutex
    count int
}
mutexes são ferramentas essenciais para gerenciar recursos compartilhados em programas GO simultâneos. Eles impedem as condições de raça e garantem a integridade dos dados controlando o acesso a seções críticas do código.

Declaração de lançamento Este artigo é reimpresso em: https://dev.to/lincemathew/what-is-mutex-and-ow-use-it-it-in-golang-1m1i?1 Se houver alguma infração, entre em contato com [email protected] para excluí-lo.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3