Objekt integriertes Objekt

ObjectCondition

Bedingungsvariablenobjekt

Bedingungsvariablen sind ein Mechanismus, der globale Variablen zur Synchronisierung verwendet, die von Fasern gemeinsam genutzt werden. Er umfasst hauptsächlich zwei Aktionen: 1) Ein Thread wartet darauf, dass eine bestimmte Bedingung wahr ist, und hält sich selbst an; 2) Ein anderer Thread macht die Bedingung wahr und benachrichtigt den Wartenden Faser nach unten ausführen.

Um Rennen zu verhindern, benötigt jede Bedingungsvariable eineLockZusammenarbeit (LockSie können es explizit selbst erstellen und übergeben, oder Sie können es von fibjs für Sie erstellen lassen.)

Durch die Verwendung von Bedingungsvariablen kann eine Bedingungsvariable verwendet werden, um den Wechsel einer Fasercharge zu steuern;

Im Folgenden finden Sie zwei Beispiele für die Faserplanung:

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 ausgeben:

1 2
ready go

Erbschaftsverhältnis

Konstrukteur

Condition

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

1
new Condition();

Bedingungsvariablenkonstruktor

1
new Condition(Lock lock);

Aufrufparameter:

  • lock:Lock, mit selbstgebauten Schlössern

Mitgliedsfunktion

wait

Warten Sie auf eine Bedingungsvariable

1
Boolean Condition.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.

notify

Benachrichtigen Sie eine blockierte Faser (die letzte, die dem Faserpool hinzugefügt wurde), um die Ausführung nach unten fortzusetzen

1
Condition.notify();

notifyAll

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

1
Condition.notifyAll();

acquire

Übernehmen Sie den Besitz des Schlosses

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

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

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