Objeto incorporado

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

generará:

1 2
ready 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)

1
new Condition();

constructor de variables de condición

1
new 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

1
Boolean 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

1
Condition.notify();

notifyAll

Notificar a todas las fibras bloqueadas para continuar la ejecución hacia abajo.

1
Condition.notifyAll();

acquire

Obtener la propiedad de la cerradura

1
Boolean 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

1
Condition.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.

1
Integer 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.

1
String 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.

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

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable