Obxecto obxecto incorporado

Bloqueo de obxectos

O bloqueo é un obxecto integrado que se pode usar para controlar o acceso simultáneo ás fibras. Podes adquirir un bloqueo a través dunha fibra para evitar que outras fibras o adquiran ao mesmo tempo. O bloqueo pode pasarcoroutine.Lock() creación de funcións

Unha situación común é que nun escenario multi-fíos, cando varios fíos queren modificar os mesmos datos, ocorrerá unha incoherencia de datos. Por exemplo, se dous fíos queren modificar o mesmo valor nos mesmos datos, os resultados poden ser inconsistentes se o control é incorrecto. Neste momento, o uso do obxecto Lock pode lograr un acceso mutuamente excluínte aos mesmos datos.

O seguinte é un exemplo sinxelo, usando Lock para implementar a execución alternativa de dúas fibras, e o valor da variable compartida v non é 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()

En primeiro lugar, créase un obxecto Lock, entra na fibra f, adquire o bloqueo, modifica a variable v e despois libera o bloqueo. No fío principal, agarda a que se complete a fibra f... Cando a fibra f libera o bloqueo, o fío principal comeza a adquirir o bloqueo e asegura que o valor da variable v cambia a 300.

relación de herdanza

%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

Construtor

Lock

Construtor

1
new Lock();

función de membro

acquire

Obter a propiedade da pechadura

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

Parámetros de chamada:

  • blocking: Booleano, especifica se esperar, esperar cando é verdadeiro, o predeterminado é verdadeiro

Resultados de devolución:

  • Boolean, devolve se o bloqueo foi adquirido correctamente, verdadeiro indica que a adquisición foi exitosa.

O método de adquisición utilízase para obter a propiedade do bloqueo. Cando o bloqueo está no estado adquirible, este método devolve verdadeiro inmediatamente.

Cando o bloqueo non se pode adquirir e o bloqueo é verdadeiro, a fibra actual pasa a durmir. Cando outras fibras liberan o bloqueo, este método devolve verdadeiro.

Cando o bloqueo non se pode adquirir e o bloqueo é falso, o método devolve false.


release

Libera a propiedade do bloqueo

1
Lock.release();

Este método liberará a propiedade do bloqueo ou producirá un erro se a fibra actual non posúe o bloqueo.


count

Consulta o número actual de tarefas en espera

1
Integer Lock.count();

Resultados de devolución:

  • Integer, devolve o número de tarefas

toString

Devolve a representación en cadea do obxecto. Polo xeral, devólvese "[Obxecto nativo]". O obxecto pódese volver implementar segundo as súas propias características.

1
String Lock.toString();

Resultados de devolución:

  • String, devolve a representación en cadea do obxecto

toJSON

Devolve unha representación en formato JSON do obxecto, devolvendo xeralmente unha colección de propiedades lexibles definidas polo obxecto.

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

Parámetros de chamada:

  • key: Cadena, non usada

Resultados de devolución:

  • Value, devolve un valor que contén JSON serializable