Implémentation de modèles de verrouillage tamponnés dans Go
Dans Go, le concept de canal tamponné existe, permettant aux canaux qui empêchent le blocage jusqu'à ce que leurs tampons soient complet. De plus, il existe des cas d'utilisation pour un modèle généralisé de « verrouillage tamponné », dans lequel une ressource est verrouillée pour un nombre spécifique de clients.
Sémaphore comme verrou tampon
Une primitive appropriée pour implémenter le verrouillage tamponné est un sémaphore. Les sémaphores contrôlent l'accès à une ressource en signalant quand la ressource est disponible pour utilisation.
Implémentation à l'aide d'un canal tamponné
Dans Go, un sémaphore peut être facilement réalisé à l'aide d'un canal tamponné. canal. Par exemple :
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if four other instances of f are already running. semaphore <- struct{}{} // Release the lock upon exiting. defer func() { <-semaphore }() // Perform necessary task here... }
Dans cet exemple, le sémaphore de canal tamponné d'une capacité de quatre garantit que seuls quatre clients peuvent accéder simultanément à la ressource protégée. Pour acquérir le verrou, les clients écrivent sur le canal, bloquant si le tampon est plein, et libèrent le verrou en lisant depuis le canal.
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!