État 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 se synchroniser. Il comprend principalement deux actions : 1) Un thread attend qu'une certaine condition soit établie et se suspend ; 2) Un autre thread fait la condition à établir, et notifie la fibre en attente d'exécution vers le bas.
Pour empêcher la concurrence, chaque variable de condition a besoin d'unLockRencontre (LockPeut être explicitement créé et transmis par vous-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 la commutation d'un lot de fibres ;
Voici deux exemples d'ordonnancement de fibre :
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);
affichera :
1
2ready
go
Héritage
Constructeur
Condition
Constructeur de variable de condition (le verrou requis par la variable de condition est construit en interne par fibjs)
1new Condition();
Constructeur de variable de condition
1new Condition(Lock lock);
Paramètres d'appel :
- lock: Lock, Utilisez une serrure auto-construite
Fonction membre
wait
Mettre la fibre en état de blocage
1Condition.wait();
notify
Notifier une fibre bloquée (celle qui a été ajoutée au pool de fibre en dernier) pour continuer son exécution vers le bas
1Condition.notify();
notifyAll
Notifier toutes les fibres bloquées pour continuer l'exécution vers le bas
1Condition.notifyAll();
acquire
Acquérir la propriété de la serrure
1Boolean Condition.acquire(Boolean blocking = true);
Paramètres d'appel :
- blocking: booléen, spécifiez s'il faut attendre, si c'est vrai, attendez, la valeur par défaut est vraie
Résultat de retour :
- Boolean, Renvoie si le verrou est acquis avec succès, true signifie que l'acquisition est 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 pouvant être acquis, cette méthode renvoie 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 vrai.
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
1Condition.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
1Integer 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 "[Objet natif]", l'objet peut être ré-implémenté selon ses propres caractéristiques
1String 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
1Value Condition.toJSON(String key = "");
Paramètres d'appel :
- key: chaîne, inutilisé
Résultat de retour :
- Value, Renvoie une valeur contenant JSON sérialisable