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:
lPara 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 lEste 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 lEste 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.
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