„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie implementiert man eine Sperre mit einer Frist in Golang?

Wie implementiert man eine Sperre mit einer Frist in Golang?

Veröffentlicht am 09.11.2024
Durchsuche:939

How to Implement a Lock with a Deadline in Golang?

Erwerb von Schlössern mit Zeitbeschränkungen in Golang

Bei der Arbeit mit Schlössern in Golang gibt es Situationen, in denen Sie entweder ein Schloss erwerben müssen sofort melden oder eine Frist einhalten. Während der sync.Mutex der Standardbibliothek nur die Funktionen Lock() und Unlock() bereitstellt, gibt es eine Technik, mit der Sie eine Sperre mit einer Frist emulieren können.

Implementieren einer Sperre mit einer Frist

Um eine Sperre mit einer Frist zu erstellen, können Sie einen Kanal mit einer Puffergröße von eins verwenden:

l := make(chan struct{}, 1)

Zum Sperren einen Strukturwert an den Kanal senden:

l 

Zum Entsperren vom Kanal empfangen :

Durchführen einer Versuchssperre

Um einen zu versuchen Versuchen Sie es mit Lock, verwenden Sie eine Select-Anweisung:

select {
case l 

Dieser Code erhält die Sperre sofort, sofern sie verfügbar ist. Wenn die Sperre bereits gehalten wird, blockiert die SELECT-Anweisung, bis die Sperre aufgehoben wird.

Versuchssperre mit Zeitüberschreitung

Um eine Zeitüberschreitung für die Versuchssperre anzugeben, fügen Sie hinzu ein time.After()-Kanal zur select-Anweisung:

select {
case l 

Dieser Code versucht bis zu einer Minute lang, die Sperre zu erlangen. Wenn die Zeitüberschreitung abläuft, wird die Select-Anweisung beendet und die Sperre wird nicht erworben.

Schlussfolgerung

Verwenden eines Kanals mit einer Puffergröße von eins als Mutex ermöglicht Ihnen die Implementierung einer Try-Sperre mit einer Frist. Diese Technik kann in Szenarien nützlich sein, in denen Sie schnell oder innerhalb eines bestimmten Zeitrahmens eine Sperre erwerben müssen.

Neuestes Tutorial Mehr>

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