Objekt eingebautes Objekt

Objekt-Semaphor

Glasfaser-Semaphor-Objekt

Das Semaphore-Objekt verwaltet einen internen Zähler, der nach dem Aufrufen von accept oder wait um eins verringert und nach dem Aufrufen von release oder post um eins erhöht wird. Der Zähler wird nicht auf eine negative Zahl sinken, da Acquisition und Wait die aktuelle Faser in den Ruhezustand versetzen, wenn der Wert 0 ist, bis andere Fasern den Wert des Zählers durch Freigabe oder Post erhöhen.

Häufige Anlässe für Semaphoren sind die Begrenzung der gleichzeitigen Nutzung von Ressourcen und die Anwendung des Erzeuger-/Verbrauchermodells.

Nehmen Sie als Beispiel Datenbankanfragen, um die gleichzeitige Nutzung von Ressourcen einzuschränken:

1 2 3 4 5 6 7 8 9 10
var maxconnections = 5; var l = new coroutine.Semaphore(maxconnections); ...... l.acquire(); var conn = connectdb() ..... conn.close(); l.release();

Das Producer/Consumer-Modell verwendet normalerweise Semaphoren in Verbindung mit Warteschlangen. Der Produzent fügt der Warteschlange Daten hinzu und sendet ein Signal, und der Verbraucher wartet zuerst auf das Signal, empfängt das Signal und geht dann zur Warteschlange, um die Daten abzufragen und abzurufen.

Erbe

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

Konstrukteur

Semaphore

Semaphor-Konstruktor

1
new Semaphore(Integer value = 1);

Aufrufparameter:

  • value: Integer, der Anfangswert des Zählers

Mitgliederfunktion

wait

Warten auf einen Semaphor, äquivalent zu akquirieren (wahr)

1
Semaphore.wait();

post

Geben Sie einen Semaphor frei, der release() entspricht

1
Semaphore.post();

trywait

Versuchen Sie, ein Signal zu erfassen. Wenn es nicht erfasst werden kann, kehren Sie sofort zurück und geben Sie false zurück, was gleichbedeutend mit Acquire(false) ist.

1
Boolean Semaphore.trywait();

Ergebnis zurückgeben:

  • Boolean, True zurückgeben, wenn die Erfassung erfolgreich war

acquire

Erwerben Sie das Eigentum am Schloss

1
Boolean Semaphore.acquire(Boolean blocking = true);

Aufrufparameter:

  • blocking: Boolean, geben Sie an, ob gewartet werden soll, wenn es wahr ist, warten Sie, der Standardwert ist wahr

Ergebnis zurückgeben:

  • Boolean, Gibt zurück, ob die Sperre erfolgreich erfasst wurde, true bedeutet, dass die Erfassung erfolgreich war

Die Methode "acquire" wird verwendet, um den Besitz der Sperre zu erwerben. Wenn sich die Sperre in einem akquirierbaren Zustand befindet, gibt diese Methode sofort true zurück.

Wenn die Sperre nicht verfügbar ist und die Blockierung wahr ist, geht die aktuelle Faser in den Ruhezustand.Wenn andere Fasern die Sperre aufheben, gibt diese Methode true zurück.

Wenn die Sperre nicht verfügbar ist und die Blockierung false ist, gibt die Methode false zurück.


release

Sperrbesitz freigeben

1
Semaphore.release();

Diese Methode gibt den Besitz der Sperre frei.Wenn die aktuelle Faser die Sperre nicht besitzt, wird bei dieser Methode ein Fehler ausgegeben.


count

Abfrage der Anzahl der aktuell wartenden Aufgaben

1
Integer Semaphore.count();

Ergebnis zurückgeben:

  • Integer, Gibt die Anzahl der Aufgaben zurück

toString

Gibt die String-Darstellung des Objekts zurück, gibt im Allgemeinen "[Native Object]" zurück, das Objekt kann entsprechend seiner eigenen Eigenschaften neu implementiert werden

1
String Semaphore.toString();

Ergebnis zurückgeben:

  • String, Gibt die String-Darstellung des Objekts zurück

toJSON

Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung von lesbaren Attributen zurück, die durch das Objekt definiert sind

1
Value Semaphore.toJSON(String key = "");

Aufrufparameter:

  • key: String, unbenutzt

Ergebnis zurückgeben:

  • Value, Gibt einen Wert zurück, der JSON serialisierbar enthält