Maison > développement back-end > Golang > le corps du texte

Les sémaphores peuvent-ils émuler le verrouillage tamponné dans Go ?

DDD
Libérer: 2024-11-14 18:37:02
original
284 Les gens l'ont consulté

Can Semaphores Emulate Buffered Locking in Go?

Modèles de verrouillage tamponnés

Dans Go, le concept de canal tamponné permet des opérations non bloquantes jusqu'à ce que le tampon du canal soit rempli. Inspirée par ce mécanisme, la question se pose : existe-t-il un modèle généralisé semblable aux canaux tamponnés pour le « verrouillage tamponné », où une ressource peut être verrouillée pour un ensemble fini de clients ?

Réponse : sémaphores

La primitive qui remplit cette exigence est un sémaphore. Construit avec un canal tamponné, un sémaphore impose une limite au nombre de clients simultanés pouvant accéder à une ressource.

Considérez l'implémentation suivante utilisant un canal tamponné :

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...
}
Copier après la connexion

Dans ce scénario , la fonction f acquiert le verrou en envoyant une valeur dans le canal sémaphore. Si le canal est plein, ce qui représente la concurrence maximale autorisée, f se bloque jusqu'à ce qu'un autre client libère le verrou en recevant une valeur du canal. L'instruction defer garantit que le verrou est libéré au retour de la fonction.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal