Gepuffertes Sperrmuster in Go
In Go ermöglicht ein gepufferter Kanal die Fortsetzung der Kommunikation ohne Blockierung, bis sein Puffer voll ist. Gibt es jedoch ein ähnliches Muster für Puffersperren, die den Ressourcenzugriff auf eine bestimmte Anzahl von Clients beschränken?
Das Grundelement für die Verwaltung des gleichzeitigen Zugriffs auf eine Ressource ist das Semaphor. Ein Semaphor kann einfach mithilfe eines gepufferten Kanals implementiert werden.
Hier ist ein Beispiel:
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if 4 other concurrent invocations of f are running. semaphoreIn diesem Beispiel wird ein Semaphor mit einem Puffer der Größe 4 mit semaphore := make(chan struct{}, 4) erstellt. Die Funktion f() versucht, die Sperre zu erlangen, indem sie eine leere Struktur an den Kanal sendet. Wenn der Kanalpuffer voll ist (d. h. es laufen bereits 4 gleichzeitige Instanzen von f()), blockiert der Aufruf von semaphore
Wenn die Funktion beendet ist Bei dieser Aufgabe wird die Sperre aufgehoben, indem eine leere Struktur aus dem Kanal abgerufen wird (-
Dieses Muster bietet eine praktische Möglichkeit, den Zugriff auf eine gemeinsam genutzte Ressource auf eine bestimmte Anzahl gleichzeitiger Clients zu beschränken und so mögliche Probleme mit Ressourcenkonflikten zu verhindern.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3