Objekt eingebautes Objekt

Objektsemaphor

Fasersemaphorobjekt

Das Semaphorobjekt verwaltet einen internen Zähler, der nach dem Aufruf von "Acquise" oder "Wait" um eins dekrementiert und nach dem Aufruf von "release" oder "post" um eins erhöht wird. Der Zähler wird nicht auf eine negative Zahl abfallen, da beim Erfassen und Warten festgestellt wird, dass der aktuelle Wert 0 ist, die aktuelle Faser in den Ruhezustand versetzt wird, bis andere Fasern durch die Freigabe oder nachträglich den Zählerwert erhöhen.

Häufige Anlässe für Semaphore sind die Begrenzung des gleichzeitigen Einsatzes von Ressourcen und die Anwendung von Erzeuger- / Verbrauchermodellen.

Nehmen Sie die Datenbankanforderung als Beispiel, um die gleichzeitige Verwendung 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, erhält dann das Signal und fragt die Warteschlange nach Daten ab.

Erbe

Konstrukteur

Semaphore

Semaphorkonstruktor

1
new Semaphore(Integer value = 1);

Parameter aufrufen:

  • value : Integer, der Anfangswert des Zählers

Mitgliedsfunktion

wait

Warten auf ein Semaphor, gleichbedeutend mit erwerben (wahr)

1
Semaphore.wait();

post

Geben Sie ein Semaphor frei, das release () entspricht.

1
Semaphore.post();

trywait

Versuchen Sie, ein Signal zu erhalten. Wenn es nicht empfangen werden kann, kehren Sie sofort zurück und geben Sie false zurück. Dies entspricht dem Erwerb von (false).

1
Boolean Semaphore.trywait();

Ergebnis zurückgeben:

  • Boolean , wahr, wenn erfolgreich

acquire

Übernehmen Sie den Besitz des Schlosses

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

Parameter aufrufen:

  • blocking : Boolescher Wert, geben Sie an, ob gewartet werden soll, warten Sie, wenn true, der Standardwert ist true

Ergebnis zurückgeben:

  • Boolean , gibt zurück, ob die Sperre erfolgreich erworben wurde. True bedeutet erfolgreiche Erfassung

Die Erfassungsmethode wird verwendet, um das Eigentum an der Sperre zu erwerben. Wenn sich die Sperre in einem erfassbaren 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 falsch ist, gibt die Methode false zurück.


release

Geben Sie das Eigentum an dem Schloss frei

1
Semaphore.release();

Diese Methode gibt den Besitz der Sperre frei. Wenn die aktuelle Glasfaser die Sperre nicht besitzt, gibt diese Methode einen Fehler aus.


count

Fragen Sie die aktuelle Anzahl wartender Aufgaben ab

1
Integer Semaphore.count();

Ergebnis zurückgeben:

  • Integer , gibt die Anzahl der Aufgaben zurück

toString

Gibt die Zeichenfolgendarstellung des Objekts zurück, gibt im Allgemeinen "[Native Object]" zurück. Das Objekt kann gemäß seinen eigenen Merkmalen erneut implementiert werden

1
String Semaphore.toString();

Ergebnis zurückgeben:

  • String , gibt eine String-Darstellung des Objekts zurück

toJSON

Gibt die JSON-Darstellung des Objekts zurück und gibt im Allgemeinen eine Sammlung lesbarer Attribute zurück, die vom Objekt definiert wurden

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

Parameter aufrufen:

  • key : String, unbenutzt

Ergebnis zurückgeben:

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