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 en tant que verrou tamponné
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. semaphoreDans 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, le bloquent si le tampon est plein, et libèrent le verrou en lisant sur le canal.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3