Objektzustand
Bedingungsvariablenobjekt
Bedingungsvariablen sind ein Mechanismus, der globale Variablen verwendet, die zwischen Fasern geteilt werden, um sich zu synchronisieren.Es umfasst hauptsächlich zwei Aktionen: 1) Ein Thread wartet auf das Einrichten einer bestimmten Bedingung undunterbricht sich selbst; 2) Ein anderer Thread macht die Einrichtung der Bedingung und benachrichtigen die wartende Faser nach unten auszuführen.
Um Konkurrenz zu vermeiden, braucht jede Bedingungsvariable eineLockSpiel (LockKann von Ihnen explizit erstellt und übergeben werden oder von fibjs für Sie erstellt werden)
Durch Verwendung von Bedingungsvariablen kann eine Bedingungsvariable verwendet werden, um den Wechsel einer Charge von Fasern zu steuern;
Im Folgenden sind zwei Beispiele für die Faserplanung aufgeführt:
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
Nachlass
Konstrukteur
Condition
Bedingungsvariablenkonstruktor (die von der Bedingungsvariable benötigte Sperre wird intern von fibjs konstruiert)
1new Condition();
Bedingungsvariablenkonstruktor
1new Condition(Lock lock);
Aufrufparameter:
- lock: Lock, Verwenden Sie ein selbstgebautes Schloss
Mitgliederfunktion
wait
Glasfaser in Sperrzustand versetzen
1Condition.wait();
notify
Benachrichtigen Sie eine blockierte Glasfaser (diejenige, die dem Glasfaserpool zuletzt hinzugefügt wurde), um ihre Ausführung nach unten fortzusetzen
1Condition.notify();
notifyAll
Benachrichtigen Sie alle blockierten Fasern, um die Ausführung nach unten fortzusetzen
1Condition.notifyAll();
acquire
Erwerben Sie das Eigentum am Schloss
1Boolean Condition.acquire(Boolean blocking = true);
Aufrufparameter:
- blocking: Boolean, geben Sie an, ob gewartet werden soll, wenn es wahr ist, warten Sie, der Standardwert ist wahr
Ergebnis zurückgeben:
- Boolean, Gibt zurück, ob die Sperre erfolgreich erfasst wurde, true bedeutet, dass die Erfassung erfolgreich war
Die Methode "acquire" wird verwendet, um den Besitz der Sperre zu erwerben. Wenn sich die Sperre in einem akquirierbaren 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 false ist, gibt die Methode false zurück.
release
Sperrbesitz freigeben
1Condition.release();
Diese Methode gibt den Besitz der Sperre frei.Wenn die aktuelle Faser die Sperre nicht besitzt, wird bei dieser Methode ein Fehler ausgegeben.
count
Abfrage der Anzahl der aktuell wartenden Aufgaben
1Integer Condition.count();
Ergebnis zurückgeben:
- Integer, Gibt die Anzahl der Aufgaben zurück
toString
Gibt die String-Darstellung des Objekts zurück, gibt im Allgemeinen "[Native Object]" zurück, das Objekt kann entsprechend seiner eigenen Eigenschaften neu implementiert werden
1String Condition.toString();
Ergebnis zurückgeben:
- String, Gibt die String-Darstellung des Objekts zurück
toJSON
Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung von lesbaren Attributen zurück, die durch das Objekt definiert sind
1Value Condition.toJSON(String key = "");
Aufrufparameter:
- key: String, unbenutzt
Ergebnis zurückgeben:
- Value, Gibt einen Wert zurück, der JSON serialisierbar enthält