Objet objet intégré

Condition de l'objet

Objet de variable de condition

La variable de condition est un mécanisme qui utilise des variables globales partagées entre les fibres pour se synchroniser. Elle comprend principalement deux actions: 1) Un thread attend qu'une certaine condition soit établie et se suspend; 2) Un autre thread fait établir la condition, Et notifiez la fibre en attente pour exécuter vers le bas.

Afin d'éviter la concurrence, chaque variable de condition a besoin d'un Lock (le Lock peut être explicitement créé et transmis par lui-même, ou il peut être créé par fibjs 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 fibre:

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

Héritage

Constructeur

Condition

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

1
new Condition();

Constructeur de variable de condition

1
new Condition(Lock lock);

Paramètres d'appel:

  • lock : Lock , utiliser un verrou auto-construit

Fonction membre

wait

Faire de la fibre un état bloqué

1
Condition.wait();

notify

Notifier une fibre bloquée (le dernier pool de fibres ajouté) pour continuer l'exécution

1
Condition.notify();

notifyAll

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

1
Condition.notifyAll();

acquire

Acquérir la propriété du verrou

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

Paramètres d'appel:

  • blocking : Boolean, spécifiez s'il faut attendre, attendez quand true, la valeur par défaut est true

Résultat de retour:

  • Boolean , renvoie si le verrou a été acquis avec succès, true signifie l'acquisition réussie

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

Lorsque le verrou n'est pas disponible 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 true.

Lorsque le verrou n'est pas disponible et que le blocage est faux, la méthode renvoie faux.


release

Libérer la propriété du verrou

1
Condition.release();

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


count

Interroger le nombre de tâches actuellement en attente

1
Integer Condition.count();

Résultat de retour:

  • Integer , renvoie le nombre de tâches

toString

Renvoie la représentation sous forme de chaîne de l'objet, renvoie généralement "[Native Object]", l'objet peut être réimplémenté selon ses propres caractéristiques

1
String Condition.toString();

Résultat de retour:

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

toJSON

Renvoie la représentation au format JSON de l'objet, renvoie généralement une collection d'attributs lisibles définis par l'objet

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

Paramètres d'appel:

  • key : chaîne, inutilisée

Résultat de retour:

  • Value , renvoie une valeur contenant JSON sérialisable