Objet objet intégré

État de l'objet

Objet variable Condition

Les variables conditionnelles sont un mécanisme de synchronisation utilisant des variables globales partagées entre les fibres. Elles comprennent principalement deux actions: 1) un thread attend qu'une certaine condition soit établie et se suspende; 2) un autre thread rend la condition vraie, Et avertissez la fibre en attente de s'exécuter vers le bas.

Afin d'empêcher la concurrence, chaque variable de condition nécessite la coopération d'un Lock (le Lock peut être explicitement créé et transmis par lui-même, ou peut être créé par fibjs pour vous)

En utilisant des variables de condition, une variable de condition peut être utilisée pour contrôler un lot de commutateurs à fibre;

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 conditionnelle

1
new Condition(Lock lock);

Paramètres d'appel:

  • lock : Lock , utiliser un verrou auto-construit

Fonction membre

wait

Mettez la fibre dans l'état bloqué

1
Condition.wait();

notify

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

1
Condition.notify();

notifyAll

Avertissez toutes les fibres bloquées de poursuivre l'exécution

1
Condition.notifyAll();

acquire

Prenez possession de la serrure

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

Paramètres d'appel:

  • blocking : booléen, spécifiez s'il faut attendre, attendez si vrai, la valeur par défaut est vraie

Résultat de retour:

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

La méthode d'acquisition est utilisée pour acquérir la propriété de la serrure. Lorsque la serrure est dans un état pouvant être acquis, cette méthode renvoie immédiatement la valeur true.

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é de la serrure

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

Recherchez le nombre actuel de tâches en attente

1
Integer Condition.count();

Résultat de retour:

  • Integer , retourne 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 une représentation sous forme de chaîne de l'objet

toJSON

Renvoie la représentation 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 , retourne une valeur contenant JSON sérialisable