Objet objet intégré

Condition de l'objet

objet variable de condition

Les variables de condition sont un mécanisme qui utilise des variables globales partagées entre les fibres pour la synchronisation. Il comprend principalement deux actions : 1) Un thread attend qu'une certaine condition soit vraie et se suspend ; 2) Un autre thread rend la condition vraie et notifie l'attente. fibre à exécuter vers le bas.

Pour éviter les courses, chaque variable de condition a besoin d'unLockcoopération (LockVous pouvez le créer explicitement vous-même et le transmettre, ou vous pouvez laisser fibjs le créer pour vous)

En utilisant des variables de condition, une variable de condition peut être utilisée pour contrôler la commutation d'un lot de fibres ;

Voici deux exemples de planification de fibres :

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);

affichera :

1 2
ready go

relation d'héritage

Constructeur

Condition

Constructeur de variable de condition (le verrou requis pour la variable de condition est construit en interne par fibjs)

1
new Condition();

constructeur de variables de condition

1
new Condition(Lock lock);

Paramètres d'appel :

  • lock:Lock, utilisant des serrures auto-construites

fonction membre

wait

attendre une variable de condition

1
Boolean Condition.wait(Integer timeout = -1);

Paramètres d'appel :

  • timeout: Nombre entier,spécifie le délai d'expiration en millisecondes. La valeur par défaut est -1, ce qui signifie qu'il n'expirera jamais.

Résultats de retour :

  • Boolean, renvoie true si l'acquisition réussit, renvoie false si le délai expire.

notify

Notifier une fibre bloquée (la dernière ajoutée au pool de fibres) pour poursuivre l'exécution vers le bas

1
Condition.notify();

notifyAll

Avertir toutes les fibres bloquées pour continuer l'exécution vers le bas

1
Condition.notifyAll();

acquire

Devenez propriétaire de la serrure

1
Boolean Condition.acquire(Boolean blocking = true);

Paramètres d'appel :

  • blocking: Booléen, spécifie s'il faut attendre, attendre quand vrai, la valeur par défaut est vrai

Résultats de retour :

  • Boolean, indique si le verrou a été acquis avec succès, true indique une acquisition réussie.

La méthode d'acquisition est utilisée pour obtenir la propriété du verrou. Lorsque le verrou est dans l'état acquérable, cette méthode renvoie immédiatement true.

Lorsque le verrou ne peut pas être acquis et que le blocage est vrai, la fibre actuelle se met en veille. Lorsque d'autres fibres libèrent le verrou, cette méthode renvoie vrai.

Lorsque le verrou ne peut pas être acquis et que le blocage est faux, la méthode renvoie faux.


release

Libérer la propriété de la serrure

1
Condition.release();

Cette méthode libérera la propriété du verrou ou générera une erreur si la fibre actuelle ne possède pas le verrou.


count

Interroger le nombre actuel de tâches en attente

1
Integer Condition.count();

Résultats de retour :

  • Integer, renvoie le nombre de tâches

toString

Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.

1
String Condition.toString();

Résultats de retour :

  • String, renvoie la représentation sous forme de chaîne de l'objet

toJSON

Renvoie une représentation au format JSON de l'objet, renvoyant généralement une collection de propriétés lisibles définies par l'objet.

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

Paramètres d'appel :

  • key: Chaîne, non utilisée

Résultats de retour :

  • Value, renvoie une valeur contenant du JSON sérialisable