Objekt eingebautes Objekt

Objektsemaphor

Fasersemaphorobjekt

Das Semaphorobjekt verwaltet einen internen Zähler, der nach dem Erfassen oder Warten um eins dekrementiert und nach dem Aufrufen oder Posten um eins erhöht wird. Der Zähler wird nicht auf eine negative Zahl verringert, da beim Erfassen und Warten die aktuelle Faser in den Ruhezustand versetzt wird, wenn der Wert 0 ist, bis die anderen Fasern den Wert des Zählers durch Loslassen oder Nachstellen erhöhen.

Semaphoren werden häufig verwendet, um die gleichzeitige Verwendung von Ressourcen und Anwendungen im Produzenten- / Konsumentenmodus zu begrenzen.

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. Der Verbraucher wartet zuerst auf das Signal und fragt dann die Daten ab, nachdem er das Signal erhalten hat.

Vererbung

Konstruktor

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();

Gibt das Ergebnis zurück:

  • Boolean , wahr, wenn erfolgreich

acquire

Erhalt des Schlossbesitzes

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

Gibt das Ergebnis zurück:

  • Boolean , gibt zurück, ob die Sperre erfolgreich erfasst wurde. True zeigt eine erfolgreiche Erfassung an

Die Erwerbsmethode wird verwendet, um das Eigentum an der Sperre zu erwerben. Diese Methode gibt sofort true zurück, wenn sich die Sperre in einem erwerbbaren Zustand befindet.

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 Anzahl der aktuell wartenden Aufgaben ab

1
Integer Semaphore.count();

Gibt das Ergebnis zurück:

  • Integer , gibt die Anzahl der Aufgaben zurück

toString

Gibt eine Zeichenfolgendarstellung des Objekts zurück, normalerweise "[Native Object]". Objekte können gemäß ihren eigenen Merkmalen neu implementiert werden

1
String Semaphore.toString();

Gibt das Ergebnis zurück:

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

toJSON

Gibt eine JSON-Darstellung des Objekts zurück, die normalerweise eine Sammlung lesbarer Eigenschaften zurückgibt, die vom Objekt definiert wurden

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

Parameter aufrufen:

  • key : String, unbenutzt

Gibt das Ergebnis zurück:

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