Objeto objeto integrado

Condición del objeto

Objeto de variable de condición

Las variables de condición son un mecanismo que utiliza variables globales compartidas entre fibras para sincronizar. Incluye principalmente dos acciones: 1) Un hilo espera que se establezca una determinada condición y se suspende; 2) Otro hilo hace que se establezca la condición, y notifica la fibra en espera para ejecutar hacia abajo.

Para evitar la competencia, cada variable de condición necesita unaLockPartido (LockPuede ser creado y pasado explícitamente por sí mismo, o puede ser creado por fibjs para usted)

Al usar variables de condición, se puede usar una variable de condición para controlar el cambio 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);

dará salida:

1 2
ready go

Herencia

#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()

Constructor

Condition

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

1
new Condition();

Constructor de variables de condición

1
new Condition(Lock lock);

Parámetros de llamada:

  • lock: Lock, Utilice una cerradura de fabricación propia

Función miembro

wait

Ponga la fibra en estado de bloqueo

1
Condition.wait();

notify

Notificar una fibra bloqueada (la que se agregó al último grupo de fibras) para continuar la ejecución hacia abajo

1
Condition.notify();

notifyAll

Notifique a todas las fibras bloqueadas para que continúen la ejecución hacia abajo

1
Condition.notifyAll();

acquire

Adquirir la propiedad de la cerradura

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

Parámetros de llamada:

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

Devolver resultado:

  • Boolean, Devuelve si el bloqueo se adquirió con éxito, verdadero significa que la adquisición se realizó correctamente

El método de adquisición se utiliza para adquirir la propiedad de la cerradura. Cuando la cerradura 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 entra en suspensión. Cuando otras fibras liberan el bloqueo, este método vuelve verdadero.

Cuando el bloqueo no está disponible y el bloqueo es falso, el método devuelve falso.


release

Liberar la propiedad del bloqueo

1
Condition.release();

Este método liberará la propiedad de la cerradura. Si la fibra actual no es propietaria de la cerradura, este método arrojará un error.


count

Consultar el número de tareas en espera actualmente

1
Integer Condition.count();

Devolver resultado:

  • Integer, Devuelve el número de tareas

toString

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

1
String Condition.toString();

Devolver resultado:

  • String, Devuelve la representación de cadena del objeto

toJSON

Devuelve la representación en formato 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

Devolver resultado:

  • Value, Devuelve un valor que contiene JSON serializable