Objekt eingebautes Objekt

Objektbedingung

Bedingungsvariablenobjekt

Bedingte Variablen sind ein Mechanismus zum Synchronisieren unter Verwendung globaler Variablen, die von Fasern gemeinsam genutzt werden. Sie umfassen hauptsächlich zwei Aktionen: 1) Ein Thread wartet auf die Einrichtung einer bestimmten Bedingung und setzt sich selbst aus; 2) Ein anderer Thread stellt die Bedingung her. Und benachrichtigen Sie die wartende Faser, um sie nach unten auszuführen.

Um Wettbewerb zu verhindern, erfordert jede Bedingungsvariable die Zusammenarbeit eines Lock ( Lock kann explizit selbst erstellt und übergeben werden oder kann von fibjs für Sie erstellt werden)

Durch die Verwendung von Bedingungsvariablen kann eine Bedingungsvariable verwendet werden, um einen Stapel von Glasfaserschaltern zu steuern.

Im Folgenden sind zwei Beispiele für die Glasfaserplanung aufgeführt:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var coroutine = require("coroutine"); var cond = new coroutine.Condition(); var ready = false; var state = "ready"; function funcwait() { cond.acquire(); while (!ready) cond.wait(); state = "go" cond.release(); } coroutine.start(funcwait); cond.acquire(); console.log(state) ready = true; cond.notify(); coroutine.sleep(); console.log(state);

wird ausgegeben:

1 2
ready go

Erbe

Konstrukteur

Condition

Konstruktor für Bedingungsvariablen (die für die Bedingungsvariable erforderliche Sperre wird intern von fibjs erstellt)

1
new Condition();

Konstruktor für bedingte Variablen

1
new Condition(Lock lock);

Parameter aufrufen:

  • lock : Lock , benutze selbstgebautes Schloss

Mitgliedsfunktion

wait

Versetzen Sie die Faser in den blockierten Zustand

1
Condition.wait();

notify

Benachrichtigen Sie eine blockierte Faser (die schließlich zum Faserpool hinzugefügt wurde), um die Ausführung fortzusetzen

1
Condition.notify();

notifyAll

Benachrichtigen Sie alle blockierten Fasern, um die Ausführung fortzusetzen

1
Condition.notifyAll();

acquire

Übernehmen Sie den Besitz des Schlosses

1
Boolean Condition.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
Condition.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 Condition.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 Condition.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 Condition.toJSON(String key = "");

Parameter aufrufen:

  • key : String, unbenutzt

Ergebnis zurückgeben:

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