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
21var 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
2ready
go
Erbschaftsverhältnis
Konstrukteur
Condition
Konstruktor für Bedingungsvariablen (die für die Bedingungsvariable erforderliche Sperre wird intern von fibjs erstellt)
1new Condition();
Bedingungsvariablenkonstruktor
1new Condition(Lock lock);
Aufrufparameter:
- lock:Lock, mit selbstgebauten Schlössern
Mitgliedsfunktion
wait
Warten Sie auf eine Bedingungsvariable
1Boolean 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
1Condition.notify();
notifyAll
Benachrichtigen Sie alle blockierten Fasern, um die Ausführung nach unten fortzusetzen
1Condition.notifyAll();
acquire
Übernehmen Sie den Besitz des Schlosses
1Boolean 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
1Condition.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
1Integer 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.
1String 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.
1Value Condition.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnisse:
- Value, gibt einen Wert zurück, der JSON serialisierbar enthält