Maison  >  Article  >  développement back-end  >  Comment implémenter un verrou avec une date limite dans Golang ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 00:40:36245parcourir

How to Implement a Lock with a Deadline in Golang?

Acquérir des verrous avec des contraintes de temps à Golang

Lorsque vous travaillez avec des verrous à 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 permet d'émuler un verrou avec une date limite.

Implémentation d'un verrou avec une date limite

Implémentation d'un verrou avec une date limite

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

Pour créer un verrou avec une date limite, vous pouvez utiliser un canal avec une taille de tampon de un :

l <- struct{}{}

Pour verrouiller, envoyez une valeur de structure au canal :

<-l

Pour déverrouiller, recevez de la chaîne :

Effectuer un verrouillage d'essai

select {
case l <- struct{}{}:
    // lock acquired
    <-l
default:
    // lock not acquired
}

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

Ce code permettra d'acquérir 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é.

Try Lock with Timeout

select {
case l <- struct{}{}:
    // lock acquired
    <-l
case <-time.After(time.Minute):
    // lock not acquired
}

Pour spécifier un délai d'attente pour le verrou d'essai, ajoutez un canal time.After() à l'instruction select :

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn