Maison > Article > développement back-end > Comment pouvez-vous implémenter un verrouillage limité dans le temps dans Go ?
Tentative d'acquisition d'un verrou limité dans le temps dans Go
Dans Go, le sync.Mutex intégré fournit uniquement le Lock() et les méthodes Unlock(). Cependant, il existe des scénarios dans lesquels il serait avantageux de pouvoir tenter d'acquérir un verrou avec une date limite, soit en abandonnant immédiatement, soit en respectant une date limite.
Énoncé du problème
Considérez les scénarios suivants :
Solution : Mutex basé sur le canal
Une solution simple pour réaliser l'acquisition du verrou avec un délai est pour utiliser un canal avec une taille de tampon de un comme mutex.
Mise en œuvre
<code class="go">l := make(chan struct{}, 1) // Lock: send a struct to the channel l <- struct{}{} // Unlock: receive a struct from the channel <-l</code>
Essayer le verrouillage
Pour essayer d'acquérir le verrou, utilisez le code suivant :
<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l default: // Lock not acquired }</code>
Essayez avec Timeout
Pour essayer d'acquérir le verrou avec un timeout, utilisez :
<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l case <-time.After(time.Minute): // Lock not acquired }</code>
Conclusion
En utilisant une approche basée sur les canaux , il est possible d'implémenter un verrou prenant en charge les tentatives d'acquisition avec délais d'attente dans Go, offrant une plus grande flexibilité dans la gestion des scénarios de verrouillage avec des contraintes de 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!