Condición del objeto
objeto variable de condición
Las variables de condición son un mecanismo que utiliza variables globales compartidas entre fibras para la sincronización. Incluye principalmente dos acciones: 1) un hilo espera a que una determinada condición sea verdadera y se suspende; 2) otro hilo hace que la condición sea verdadera y notifica a la espera. fibra para ejecutar hacia abajo.
Para evitar carreras, cada variable de condición necesita unLockcooperación (LockPuede crearlo usted mismo explícitamente y pasarlo, o puede dejar que fibjs lo cree por usted)
Al utilizar variables de condición, se puede utilizar una variable de condición para controlar la conmutación de un lote de fibras;
Los siguientes son dos ejemplos 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);
generará:
1
2ready
go
relación de herencia
Constructor
Condition
Constructor de variable de condición (el bloqueo requerido para la variable de condición lo construye internamente fibjs)
1new Condition();
constructor de variables de condición
1new Condition(Lock lock);
Parámetros de llamada:
- lock:Lock, utilizando cerraduras de construcción propia
función miembro
wait
esperar una variable de condición
1Boolean Condition.wait(Integer timeout = -1);
Parámetros de llamada:
- timeout: Entero, especifica el tiempo de espera en milisegundos. El valor predeterminado es -1, lo que significa que nunca expirará.
Resultados de devolución:
- Boolean, devuelve verdadero si la adquisición es exitosa, devuelve falso si se agota el tiempo de espera.
notify
Notificar una fibra bloqueada (la última agregada al grupo de fibras) para continuar la ejecución hacia abajo
1Condition.notify();
notifyAll
Notificar a todas las fibras bloqueadas para continuar la ejecución hacia abajo.
1Condition.notifyAll();
acquire
Obtener la propiedad de la cerradura
1Boolean Condition.acquire(Boolean blocking = true);
Parámetros de llamada:
- blocking: Booleano, especifica si se debe esperar, esperar cuando sea verdadero, el valor predeterminado es verdadero
Resultados de devolución:
- Boolean, devuelve si el bloqueo se adquirió correctamente; verdadero indica que la adquisición se realizó correctamente.
El método de adquisición se utiliza para obtener la propiedad del candado. Cuando el candado está en estado adquirible, este método devuelve verdadero inmediatamente.
Cuando no se puede adquirir el bloqueo y el bloqueo es verdadero, la fibra actual entra en modo de suspensión. Cuando otras fibras liberan el bloqueo, este método devuelve verdadero.
Cuando no se puede adquirir el bloqueo y el bloqueo es falso, el método devuelve falso.
release
Liberar la propiedad de la cerradura
1Condition.release();
Este método liberará la propiedad del candado o generará un error si la fibra actual no es propietaria del candado.
count
Consultar el número actual de tareas en espera.
1Integer Condition.count();
Resultados de devolución:
- Integer, devuelve el número de tareas
toString
Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.
1String Condition.toString();
Resultados de devolución:
- String, devuelve la representación de cadena del objeto
toJSON
Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.
1Value Condition.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable