Objecte objecte incorporat

ObjectCondition

objecte variable de condició

Les variables de condició són un mecanisme que utilitza variables globals compartides entre fibres per a la sincronització. Inclou principalment dues accions: 1) Un fil espera que una determinada condició sigui certa i se suspèn; 2) Un altre fil fa que la condició sigui vertadera i notifica l'espera. fibra per executar-se cap avall.

Per evitar curses, cada variable de condició necessita aLockcooperació (LockPodeu crear-lo explícitament i passar-lo, o podeu deixar que els fibjs el creïn per vosaltres)

Mitjançant l'ús de variables de condició, es pot utilitzar una variable de condició per controlar la commutació d'un lot de fibres;

A continuació es mostren dos exemples de programació de fibra:

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

sortirà:

1 2
ready go

relació hereditària

Constructor

Condition

Constructor de variables de condició (el bloqueig necessari per a la variable de condició es construeix internament per fibjs)

1
new Condition();

constructor de variables de condició

1
new Condition(Lock lock);

Paràmetres de trucada:

  • lock:Lock, utilitzant panys autoconstruïts

funció de membre

wait

esperar una variable de condició

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

Paràmetres de trucada:

  • timeout: Sencer, especifica el temps d'espera en mil·lisegons. El valor predeterminat és -1, la qual cosa significa que no s'espera mai.

Resultats de retorn:

  • Boolean, retorna true si l'adquisició té èxit, retorna false si s'esgota el temps.

notify

Notifiqueu una fibra bloquejada (l'última que s'afegeix al conjunt de fibra) per continuar l'execució cap avall

1
Condition.notify();

notifyAll

Aviseu a totes les fibres bloquejades per continuar l'execució cap avall

1
Condition.notifyAll();

acquire

Obteniu la propietat del pany

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

Paràmetres de trucada:

  • blocking: Booleà, especifica si s'ha d'esperar, esperar quan és cert, per defecte és cert

Resultats de retorn:

  • Boolean, retorna si el bloqueig s'ha adquirit correctament, true indica l'adquisició correcta.

El mètode d'adquisició s'utilitza per obtenir la propietat del bloqueig. Quan el bloqueig està en l'estat d'adquirir, aquest mètode retorna veritable immediatament.

Quan el bloqueig no es pot adquirir i el bloqueig és cert, la fibra actual s'entén. Quan altres fibres alliberen el bloqueig, aquest mètode torna cert.

Quan el bloqueig no es pot adquirir i el bloqueig és fals, el mètode retorna fals.


release

Allibera la propietat del pany

1
Condition.release();

Aquest mètode alliberarà la propietat del bloqueig o generarà un error si la fibra actual no és la propietària del bloqueig.


count

Consulta el nombre actual de tasques en espera

1
Integer Condition.count();

Resultats de retorn:

  • Integer, retorna el nombre de tasques

toString

Retorna la representació de cadena de l'objecte. En general, es retorna "[Objecte natiu]". L'objecte es pot tornar a implementar segons les seves pròpies característiques.

1
String Condition.toString();

Resultats de retorn:

  • String, retorna la representació de cadena de l'objecte

toJSON

Retorna una representació en format JSON de l'objecte, generalment retornant una col·lecció de propietats llegibles definides per l'objecte.

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

Paràmetres de trucada:

  • key: Corda, no utilitzada

Resultats de retorn:

  • Value, retorna un valor que conté JSON serializable