Objekt eingebautes Objekt

Objektbedingung

Bedingungsvariablenobjekt

Bedingungsvariablen sind ein Mechanismus, der globale Variablen verwendet, die von Fasern gemeinsam genutzt werden, um zu synchronisieren. Dies umfasst hauptsächlich zwei Aktionen: 1) Ein Thread wartet auf die Erfüllung einer Bedingung und setzt sich selbst aus. 2) Ein anderer Thread macht die Bedingung wahr. Und benachrichtigen Sie die wartende Faser, um sie nach unten auszuführen.

Um Wettbewerb zu verhindern, benötigt jede Bedingungsvariable die Zusammenarbeit eines Lock (das 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

Vererbung

Konstruktor

Condition

Konstruktor für Bedingungsvariablen (Sperren, die für Bedingungsvariablen erforderlich sind, werden intern von fibjs erstellt)

1
new Condition();

Konstruktor für Bedingungsvariablen

1
new Condition(Lock lock);

Parameter aufrufen:

  • lock : Lock , benutze ein selbstgebautes Schloss

Mitgliedsfunktion

wait

Versetzen Sie die Faser in einen blockierten Zustand

1
Condition.wait();

notify

Benachrichtigen Sie eine blockierte Glasfaser (die zuletzt dem Glasfaserpool beigetreten ist), um die Ausführung fortzusetzen

1
Condition.notify();

notifyAll

Benachrichtigen Sie alle blockierten Fasern, damit sie weiter nach unten gehen

1
Condition.notifyAll();

acquire

Erhalt des Schlossbesitzes

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

Gibt das Ergebnis zurück:

  • Boolean , gibt zurück, ob die Sperre erfolgreich erfasst wurde. True zeigt eine erfolgreiche Erfassung an

Die Erwerbsmethode wird verwendet, um das Eigentum an der Sperre zu erwerben. Diese Methode gibt sofort true zurück, wenn sich die Sperre in einem erwerbbaren Zustand befindet.

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 Anzahl der aktuell wartenden Aufgaben ab

1
Integer Condition.count();

Gibt das Ergebnis zurück:

  • Integer , gibt die Anzahl der Aufgaben zurück

toString

Gibt eine Zeichenfolgendarstellung des Objekts zurück, normalerweise "[Native Object]". Objekte können gemäß ihren eigenen Merkmalen neu implementiert werden

1
String Condition.toString();

Gibt das Ergebnis zurück:

  • String , gibt eine String-Darstellung des Objekts zurück

toJSON

Gibt eine JSON-Darstellung des Objekts zurück, die normalerweise eine Sammlung lesbarer Eigenschaften zurückgibt, die vom Objekt definiert wurden

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

Parameter aufrufen:

  • key : String, unbenutzt

Gibt das Ergebnis zurück:

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