"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 > Como os canais com buffer podem implementar o bloqueio com buffer no Go?

Como os canais com buffer podem implementar o bloqueio com buffer no Go?

Publicado em 13/11/2024
Navegar:644

How Can Buffered Channels Implement Buffered Locking in Go?

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.
    semaphore 

Neste 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.

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