Objeto objeto incorporado

Condición del objeto

Objeto variable de condición

Las variables condicionales son un mecanismo para sincronizar usando variables globales compartidas entre fibras. Incluyen principalmente dos acciones: 1) un hilo espera a que se establezca una determinada condición y se suspende; 2) otro hilo hace que la condición sea verdadera, Y notifique a la fibra en espera que se ejecute hacia abajo.

Para evitar la competencia, cada variable de condición requiere la cooperación de un Lock (el Lock se puede crear explícitamente y pasar por sí mismo, o fibjs puede crearlo para usted)

Al usar variables de condición, se puede usar una variable de condición para controlar un lote de interruptores de fibra;

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

dará salida:

1 2
ready go

Herencia

Constructor

Condition

Constructor de la variable de condición (el bloqueo requerido por la variable de condición está construido internamente por fibjs)

1
new Condition();

Constructor de variables condicionales

1
new Condition(Lock lock);

Parámetros de llamada:

  • lock : Lock , uso de bloqueo autoconstruido

Función miembro

wait

Ponga la fibra en el estado bloqueado

1
Condition.wait();

notify

Notificar una fibra bloqueada (finalmente agregada al grupo de fibras) para continuar la ejecución

1
Condition.notify();

notifyAll

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

1
Condition.notifyAll();

acquire

Tomar posesión de la cerradura

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

Parámetros de llamada:

  • blocking : booleano, especifique si esperar, esperar si es verdadero, el valor predeterminado es verdadero

Resultado devuelto:

  • Boolean , devuelve si el bloqueo se adquirió con éxito, verdadero significa adquisición exitosa

El método de adquisición se utiliza para adquirir la propiedad del bloqueo. Cuando el bloqueo está en un estado adquirible, este método devuelve verdadero inmediatamente.

Cuando el bloqueo no está disponible y el bloqueo es verdadero, la fibra actual se duerme. Este método vuelve verdadero cuando otras fibras liberan el bloqueo.

Cuando el bloqueo no está disponible 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 bloqueo. Si la fibra actual no posee el bloqueo, este método arrojará un error.


count

Consulta el número actual de tareas en espera

1
Integer Condition.count();

Resultado devuelto:

  • Integer , devuelve el número de tareas

toString

Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", el objeto se puede volver a implementar de acuerdo con sus propias características

1
String Condition.toString();

Resultado devuelto:

  • String , devuelve una representación de cadena del objeto

toJSON

Devuelve la representación JSON del objeto, generalmente devuelve una colección de atributos legibles definidos por el objeto

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

Parámetros de llamada:

  • key : cadena, sin usar

Resultado devuelto:

  • Value , devuelve un valor que contiene JSON serializable