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
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
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)
1new Condition();
constructeur de variables de condition
1new Condition(Lock lock);
Paramètres d'appel :
- lock:Lock, utilisant des serrures auto-construites
fonction membre
wait
attendre une variable de condition
1Boolean 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
1Condition.notify();
notifyAll
Avertir toutes les fibres bloquées pour continuer l'exécution vers le bas
1Condition.notifyAll();
acquire
Devenez propriétaire de la serrure
1Boolean 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
1Condition.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
1Integer 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.
1String 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.
1Value 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