Obxecto obxecto incorporado

ObxectoCondición

obxecto variable de condición

As variables de condición son un mecanismo que usa variables globais compartidas entre fibras para a sincronización. Inclúe principalmente dúas accións: 1) Un fío agarda a que unha determinada condición sexa certa e suspéndese a si mesmo; 2) Outro fío fai que a condición sexa verdadeira, e notifica á espera. fibra para executar cara abaixo.

Para evitar carreiras, cada variable de condición necesita aLockcooperación (LockPodes crealo explícitamente ti mesmo e pasalo, ou podes deixar que os fibjs o creen por ti)

Usando variables de condición, pódese usar unha variable de condición para controlar a conmutación dun lote de fibras;

Os seguintes son dous exemplos de programación 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);

sairá:

1 2
ready go

relación de herdanza

Construtor

Condition

Construtor de variables de condición (o bloqueo necesario para a variable de condición constrúese internamente mediante fibjs)

1
new Condition();

constructor de variables de condición

1
new Condition(Lock lock);

Parámetros de chamada:

  • lock:Lock, utilizando peches de construción propia

función de membro

wait

esperar unha variable de condición

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

Parámetros de chamada:

  • timeout: Número enteiro, especifica o tempo de espera en milisegundos. O valor predeterminado é -1, o que significa que nunca se agotará.

Resultados de devolución:

  • Boolean, devolve verdadeiro se a adquisición é exitosa, devolve false se supera o tempo de espera.

notify

Notifica a unha fibra bloqueada (a última engadida ao grupo de fibras) para continuar a execución cara abaixo

1
Condition.notify();

notifyAll

Notificar a todas as fibras bloqueadas para continuar a execución cara abaixo

1
Condition.notifyAll();

acquire

Obter a propiedade da pechadura

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

Parámetros de chamada:

  • blocking: Booleano, especifica se esperar, esperar cando é verdadeiro, o predeterminado é verdadeiro

Resultados de devolución:

  • Boolean, devolve se o bloqueo se adquiriu correctamente, verdadeiro indica que a adquisición foi exitosa.

O método de adquisición utilízase para obter a propiedade do bloqueo. Cando o bloqueo está no estado adquirible, este método devolve verdadeiro inmediatamente.

Cando o bloqueo non se pode adquirir e o bloqueo é verdadeiro, a fibra actual pasa a durmir. Cando outras fibras liberan o bloqueo, este método devolve verdadeiro.

Cando o bloqueo non se pode adquirir e o bloqueo é falso, o método devolve false.


release

Libera a propiedade do bloqueo

1
Condition.release();

Este método liberará a propiedade do bloqueo ou producirá un erro se a fibra actual non posúe o bloqueo.


count

Consulta o número actual de tarefas en espera

1
Integer Condition.count();

Resultados de devolución:

  • Integer, devolve o número de tarefas

toString

Devolve a representación en cadea do obxecto. Polo xeral, devólvese "[Obxecto nativo]". O obxecto pódese volver implementar segundo as súas propias características.

1
String Condition.toString();

Resultados de devolución:

  • String, devolve a representación en cadea do obxecto

toJSON

Devolve unha representación en formato JSON do obxecto, devolvendo xeralmente unha colección de propiedades lexibles definidas polo obxecto.

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

Parámetros de chamada:

  • key: Cadena, non usada

Resultados de devolución:

  • Value, devolve un valor que contén JSON serializable