Maison > Article > développement back-end > Les canaux tamponnés peuvent-ils être utilisés pour implémenter le verrouillage tamponné dans Go ?
Verrouillage tamponné en Go
En Go, les canaux tamponnés permettent la communication sans blocage jusqu'à ce que le tampon soit plein. Cela soulève la question : existe-t-il un modèle général de verrouillage tamponné, où une ressource est verrouillée pour un nombre limité de clients ?
Réponse : Sémaphores
La primitive pour verrouiller une ressource pour un nombre limité de clients est un sémaphore. Un sémaphore est facilement implémenté à l'aide d'un canal tamponné.
Considérez l'exemple suivant :
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks as long as 4 other invocations of f are still running. semaphore <- struct{}{} // Release the lock once we're done. defer func() { <-semaphore }() // Do work... }
Dans cet exemple, le canal tamponné avec quatre éléments (make(chan struct{}, 4) ) fait office de sémaphore. La fonction f saisit le verrou en envoyant une valeur au canal. Si le canal est plein, la fonction se bloquera jusqu'à ce qu'une valeur soit reçue. Une fois le verrou acquis, l'instruction defer garantit que le verrou est libéré au retour de la fonction.
En utilisant des sémaphores implémentés avec des canaux tamponnés, vous pouvez créer des modèles de verrouillage tamponnés qui restreignent l'accès à une ressource à un nombre limité. d'utilisateurs simultanés.
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!