Obxecto incorporado

Condición do obxecto

Obxecto variable de condición

As variables de condición son un mecanismo que usa variables globais compartidas entre fibras para sincronizarse. Inclúe principalmente dúas accións: 1) Un fío agarda a que se estableza unha determinada condición e suspéndase; 2) Outro fío fai que se estableza a condición e avisa a fibra de espera para executarse cara abaixo.

Para evitar a competencia, cada variable de condición precisa unhaLockPartido (LockPode ser creado e entregado de xeito explícito por ti ou pode ser creado por fibjs para ti)

Ao usar variables de condición, pódese usar unha variable de condición para controlar o cambio 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

Herdanza

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Condition|new Condition()|wait();notify();notifyAll()] [object] <:- [Lock] [Lock] <:- [Condition] Lock new Lock() acquire() release() count() Condition new Condition() wait() notify() notifyAll() object toString() toJSON()

Construtor

Condition

Constructor de variable de condición (o bloqueo requirido pola variable de condición é construído internamente por fibjs)

1
new Condition();

Condutor construtor de variables

1
new Condition(Lock lock);

Parámetros de chamada:

  • lock: Lock, Use un bloqueo de construción propia

Función de membro

wait

Pon a fibra en estado de bloqueo

1
Condition.wait();

notify

Notifique a unha fibra bloqueada (a que se engadiu ao último grupo de fibras) para continuar a súa execución cara abaixo

1
Condition.notify();

notifyAll

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

1
Condition.notifyAll();

acquire

Adquirir a propiedade da pechadura

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

Parámetros de chamada:

  • blocking: Booleano, especifica se agardar, se é verdade, agarda, o predeterminado é verdadeiro

Resultado de volta:

  • Boolean, Devolve se o bloqueo se adquiriu correctamente, o que significa que a adquisición é correcta

O método de adquisición úsase para adquirir a propiedade do bloqueo. Cando o bloqueo está nun estado que se pode adquirir, este método devolve a verdade inmediatamente.

Cando o bloqueo non está dispoñible e o bloqueo é verdadeiro, a fibra actual queda en suspensión. Cando outras fibras soltan o bloqueo, este método devólvese verdadeiro.

Cando o bloqueo non está dispoñible e o bloqueo é falso, o método devolve falso.


release

Liberar a propiedade do bloqueo

1
Condition.release();

Este método liberará a propiedade do bloqueo. Se a fibra actual non é propietaria do bloqueo, este método producirá un erro.


count

Consulte o número de tarefas en espera actualmente

1
Integer Condition.count();

Resultado de volta:

  • Integer, Devolve o número de tarefas

toString

Devolve a representación de cadea do obxecto, xeralmente devolve "[Obxecto nativo]", o obxecto pode reimplementarse segundo as súas propias características

1
String Condition.toString();

Resultado de volta:

  • String, Devolve a representación de cadea do obxecto

toJSON

Devolve a representación en formato JSON do obxecto, xeralmente devolve unha colección de atributos lexibles definidos polo obxecto

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

Parámetros de chamada:

  • key: Cadea, sen usar

Resultado de volta:

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