Maison >développement back-end >Golang >Pouvez-vous créer un « verrou tamponné » dans Go ?
Go introduit le concept de canaux tamponnés, permettant aux canaux d'accepter des messages sans se bloquer jusqu'à ce que le tampon soit rempli. Cela soulève la question : un modèle similaire peut-il être appliqué aux mécanismes de verrouillage, créant un « verrou tamponné » qui restreint l'accès aux ressources à un nombre spécifique de clients ?
La primitive conçu pour gérer l'accès aux ressources partagées tout en limitant la concurrence des clients est connu sous le nom de sémaphore. Dans Go, les sémaphores peuvent être facilement implémentés à l'aide de canaux tamponnés.
Considérez l'extrait de code suivant :
var semaphore = make(chan struct{}, 4) // limit to 4 concurrent users func f() { // Acquire the lock. Blocks until at most 3 other goroutines are already executing f. semaphore <- struct{}{} // Release the lock when done. defer func() { <-semaphore }() // Perform the protected work... }
Ici, le sémaphore est représenté par un canal tamponné. de taille 4, qui permet jusqu'à quatre appels simultanés de la fonction f. L'opération <-sémaphore récupère une valeur du canal, la bloquant jusqu'à ce qu'elle devienne disponible. L'opération <-sémaphore libère une valeur dans le canal, permettant à une autre goroutine d'acquérir le verrou.
Les sémaphores fournissent un mécanisme simple et efficace pour implémenter un verrouillage tamponné dans Go, permettant accès contrôlé aux ressources partagées par un nombre limité de clients.
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!