Maison >développement back-end >Golang >Comment puis-je acquérir des verrous avec des délais en Go ?

Comment puis-je acquérir des verrous avec des délais en Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 11:47:29261parcourir

How Can I Acquire Locks with Deadlines in Go?

Acquérir des verrous avec des délais dans Go

Dans Go, le sync.Mutex offre un accès exclusif à une ressource partagée. Cependant, il lui manque la possibilité d'acquérir des verrous avec des délais, comme TryLock ou LockBefore. Cela présente des défis dans certains scénarios, comme les services sensibles à la latence ou la mise à jour d'objets dans un délai imparti.

Solution : utiliser un canal comme mutex

Une alternative à sync.Mutex consiste à utiliser un canal avec une taille de tampon de un comme mutex. Cette approche fournit un moyen simple et efficace de mettre en œuvre l'acquisition de verrous avec des délais.

Verrouillage :

<code class="go">l := make(chan struct{}, 1)
l <- struct{}{} // Acquire the lock</code>

Déverrouillage :

<code class="go"><-l // Release the lock</code>

Essayez le verrouillage :

<code class="go">select {
case l <- struct{}{}:
    // Lock acquired
    <-l
default:
    // Lock not acquired
}</code>

Essayez le verrouillage avec délai d'attente :

<code class="go">select {
case l <- struct{}{}:
    // Lock acquired
    <-l
case <-time.After(time.Minute):
    // Lock not acquired
}</code>

En utilisant un canal comme mutex , vous pouvez obtenir le comportement souhaité en tentant d'acquérir un verrou dans un délai spécifié. Cette méthode fournit une solution flexible et efficace pour les scénarios où l'acquisition de verrous doit être limitée dans le temps.

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