Implementando padrões de bloqueio com buffer no Go
No Go, existe o conceito de canal em buffer, permitindo canais que evitam o bloqueio até que seus buffers sejam completo. Além disso, há casos de uso para um padrão generalizado de "bloqueio em buffer", em que um recurso é bloqueado para um número específico de clientes.
Semáforo como bloqueio em buffer
Uma primitiva adequada para implementar o bloqueio em buffer é um semáforo. Os semáforos controlam o acesso a um recurso sinalizando quando o recurso está disponível para uso.
Implementação usando canal buffer
Em Go, um semáforo pode ser convenientemente realizado usando um buffer canal. Por exemplo:
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if four other instances of f are already running. semaphoreNeste exemplo, o semáforo de canal em buffer com capacidade para quatro garante que apenas quatro clientes possam acessar simultaneamente o recurso protegido. Para adquirir o bloqueio, os clientes escrevem no canal, bloqueando se o buffer estiver cheio, e liberam o bloqueio lendo o canal.
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