"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter un verrou avec une date limite dans Golang ?

Comment implémenter un verrou avec une date limite dans Golang ?

Publié le 2024-11-09
Parcourir:323

How to Implement a Lock with a Deadline in Golang?

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 :

l 

Pour déverrouiller, recevez du canal :

Effectuer un verrouillage d'essai

Pour tenter un verrouillage d'essai, utilisez une instruction select :

select {
case l 

Ce 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 l 

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

Dernier tutoriel Plus>

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