Objeto incorporado

Bloqueo de objetos

Lock es un objeto integrado que se puede utilizar para controlar el acceso simultáneo a fibras. Puede adquirir un bloqueo a través de una fibra para evitar que otras fibras lo adquieran al mismo tiempo. El bloqueo puede pasarcoroutine.Lock() creación de funciones

Una situación común es que en un escenario de subprocesos múltiples, cuando varios subprocesos quieren modificar los mismos datos, se producirán inconsistencias en los datos. Por ejemplo, si dos subprocesos quieren modificar el mismo valor en los mismos datos, los resultados pueden ser inconsistentes si el control es inadecuado. En este momento, el uso del objeto Lock puede lograr un acceso mutuamente excluyente a los mismos datos.

El siguiente es un ejemplo simple: se utiliza Lock para implementar la ejecución alternativa de dos fibras y el valor de la variable compartida v no es 300.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
var coroutine = require("coroutine") var l = new coroutine.Lock() var v = 100 function f() { l.acquire() v = 200 coroutine.sleep(1) v = 300 l.release() } coroutine.start(f) coroutine.sleep(1) l.acquire() assert.notEqual(300, v) assert.equal(200, v) l.release()

Primero, se crea un objeto Lock, ingresa a la fibra f, adquiere el bloqueo, modifica la variable v y luego libera el bloqueo. En el hilo principal, espere a que se complete la fibra f... Cuando la fibra f libera el bloqueo, el hilo principal comienza a adquirir el bloqueo y se asegura de que el valor de la variable v cambie a 300.

relación de herencia

%0 object object toString() toJSON() Lock Lock new Lock() acquire() release() count() object->Lock Condition Condition Lock->Condition Event Event Lock->Event Semaphore Semaphore Lock->Semaphore

Constructor

Lock

Constructor

1
new Lock();

función miembro

acquire

Obtener la propiedad de la cerradura

1
Boolean Lock.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
Lock.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 Lock.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 Lock.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 Lock.toJSON(String key = "");

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable