"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar un bloqueo con fecha límite en Golang?

¿Cómo implementar un bloqueo con fecha límite en Golang?

Publicado el 2024-11-09
Navegar:136

How to Implement a Lock with a Deadline in Golang?

Adquirir candados con restricciones de tiempo en Golang

Al trabajar con candados en Golang, hay situaciones en las que es posible que necesite adquirir un candado inmediatamente u observar algún tipo de plazo. Si bien sync.Mutex de la biblioteca estándar solo proporciona las funciones Lock() y Unlock(), existe una técnica que le permite emular un bloqueo con una fecha límite.

Implementación de un bloqueo con una fecha límite

Para crear un bloqueo con una fecha límite, puede usar un canal con un tamaño de búfer de uno:

l := make(chan struct{}, 1)

Para bloquear, envía un valor de estructura al canal:

l 

Para desbloquear, recibe del canal:

Realización de un bloqueo de prueba

Para intentar un bloqueo de prueba, utilice una selección declaración:

select {
case l 

Este código adquirirá inmediatamente el bloqueo si está disponible. Si el bloqueo ya está retenido, la instrucción de selección se bloqueará hasta que se libere el bloqueo.

Intente bloquear con tiempo de espera

Para especificar un tiempo de espera para el bloqueo de prueba, agregue un canal time.After() a la declaración de selección:

select {
case l 

Este código intentará adquirir el bloqueo durante un máximo de un minuto. Si el tiempo de espera expira, la instrucción de selección saldrá y no se adquirirá el bloqueo.

Conclusión

Uso de un canal con un tamaño de búfer de uno como mutex le permite implementar un bloqueo de prueba con una fecha límite. Esta técnica puede resultar útil en situaciones en las que necesitas adquirir un candado rápidamente o dentro de un plazo específico.

Último tutorial Más>

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