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
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);
sairá:
1
2ready
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)
1new Condition();
constructor de variables de condición
1new 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
1Boolean 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
1Condition.notify();
notifyAll
Notificar a todas as fibras bloqueadas para continuar a execución cara abaixo
1Condition.notifyAll();
acquire
Obter a propiedade da pechadura
1Boolean 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
1Condition.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
1Integer 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.
1String 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.
1Value 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