Implementación de patrones de bloqueo almacenados en búfer en Go
En Go, existe el concepto de un canal con búfer, que permite canales que evitan el bloqueo hasta que sus búferes estén lleno. Además, existen casos de uso para un patrón generalizado de "bloqueo en búfer", donde un recurso está bloqueado para un número específico de clientes.
Semaphore como bloqueo en búfer
Una primitiva adecuada para implementar el bloqueo almacenado en búfer es un semáforo. Los semáforos controlan el acceso a un recurso al señalar cuándo el recurso está disponible para su uso.
Implementación usando un canal almacenado en búfer
En Go, un semáforo se puede realizar convenientemente usando un canal almacenado en búfer canal. Por ejemplo:
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. semaphoreEn este ejemplo, el semáforo del canal almacenado en búfer con una capacidad de cuatro garantiza que solo cuatro clientes puedan acceder simultáneamente al recurso protegido. Para adquirir el bloqueo, los clientes escriben en el canal, lo bloquean si el búfer está lleno y liberan el bloqueo leyendo desde el canal.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3