Acquérir des verrous avec des contraintes de temps dans Golang
Lorsque vous travaillez avec des verrous dans Golang, il existe des situations dans lesquelles vous devrez peut-être acquérir un verrou immédiatement ou respecter une certaine forme de délai. Alors que sync.Mutex de la bibliothèque standard ne fournit que les fonctions Lock() et Unlock(), il existe une technique qui vous permet d'émuler un verrou avec une date limite.
Implémentation d'un verrou avec une date limite &&&]
Pour créer un verrou avec une date limite, vous pouvez utiliser un canal avec une taille de tampon de un :
l := make(chan struct{}, 1)
Pour verrouiller, envoyez une valeur struct au canal :
lPour déverrouiller, recevez du canal :
Effectuer un verrouillage d'essai
Pour tenter un verrouillage d'essai, utilisez une instruction select :
select { case lCe code acquerra immédiatement le verrou s'il est disponible. Si le verrou est déjà maintenu, l'instruction select se bloquera jusqu'à ce que le verrou soit libéré.
Essayer le verrouillage avec délai d'attente
Pour spécifier un délai d'attente pour le verrou d'essai, ajoutez un canal time.After() à l'instruction select :
select { case lCe code tentera d'acquérir le verrou pendant une minute maximum. Si le délai d'attente expire, l'instruction select se terminera et le verrou ne sera pas acquis.
Conclusion
Utilisation d'un canal avec une taille de tampon de un comme mutex vous permet d'implémenter un try lock avec une date limite. Cette technique peut être utile dans les scénarios où vous devez acquérir un verrou rapidement ou dans un délai précis.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3