Objekt integriertes Objekt

ObjectSemaphore

Faser-Semaphor-Objekt

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

Häufig genutzte Anlässe für Semaphoren sind die Begrenzung der gleichzeitigen Nutzung von Ressourcen und die Anwendung des Producer/Consumer-Modells.

Nehmen Sie als Beispiel Datenbankanforderungen, 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-Muster verwendet normalerweise Semaphore mit Warteschlangen. Der Produzent fügt der Warteschlange Daten hinzu und sendet ein Signal. Der Verbraucher wartet zuerst auf das Signal, erhält das Signal und geht dann zur Warteschlange, um die Daten abzufragen.

Erbschaftsverhältnis

Konstrukteur

Semaphore

Semaphor-Konstruktor

1
new Semaphore(Integer value = 1);

Aufrufparameter:

  • value: Ganzzahl, Anfangswert des Zählers

Mitgliedsfunktion

wait

warte auf ein Semaphor

1
Boolean Semaphore.wait(Integer timeout = -1);

Aufrufparameter:

  • timeout: Ganzzahl, gibt den Timeout in Millisekunden an. Der Standardwert ist -1, was bedeutet, dass es nie zu einem Timeout kommt.

Rückgabeergebnisse:

  • Boolean, gibt „true“ zurück, wenn die Erfassung erfolgreich war, und gibt „false“ zurück, wenn das Zeitlimit überschritten wird.

post

Geben Sie ein Semaphor frei, äquivalent zu release()

1
Semaphore.post();

trywait

Versuchen Sie, ein Signal zu erfassen. Wenn es nicht erfasst werden kann, wird es sofort zurückgegeben und gibt false zurück, was der Erfassung (false) entspricht.

1
Boolean Semaphore.trywait();

Rückgabeergebnisse:

  • Boolean, gibt „true“ zurück, wenn die Erfassung erfolgreich war, und gibt „false“ zurück, wenn das Zeitlimit überschritten wird.

acquire

Übernehmen Sie den Besitz des Schlosses

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

Aufrufparameter:

  • blocking: Boolescher Wert, gibt an, ob gewartet werden soll. Warten, wenn wahr, der Standardwert ist wahr

Rückgabeergebnisse:

  • Boolean, gibt zurück, ob die Sperre erfolgreich erworben wurde, true zeigt den erfolgreichen Erwerb an.

Die Acquire-Methode wird verwendet, um den Besitz der Sperre zu erlangen. Wenn sich die Sperre im erwerbbaren Zustand befindet, gibt diese Methode sofort „true“ zurück.

Wenn die Sperre nicht erworben werden kann 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 erworben werden kann und die Blockierung falsch ist, gibt die Methode „false“ zurück.


release

Geben Sie den Besitz des Schlosses frei

1
Semaphore.release();

Diese Methode gibt den Besitz der Sperre frei oder löst einen Fehler aus, wenn die aktuelle Faser nicht Eigentümer der Sperre ist.


count

Fragen Sie die aktuelle Anzahl der wartenden Aufgaben ab

1
Integer Semaphore.count();

Rückgabeergebnisse:

  • Integer, gibt die Anzahl der Aufgaben zurück

toString

Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.

1
String Semaphore.toString();

Rückgabeergebnisse:

  • String, gibt die Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.

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

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

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