Objecte objecte incorporat

ObjectLock

El bloqueig és un objecte integrat que es pot utilitzar per controlar l'accés simultània a les fibres. Podeu adquirir un bloqueig a través d'una fibra per evitar que altres fibres l'adquirin al mateix temps. El pany pot passarcoroutine.Lock() creació de funcions

Una situació habitual és que en un escenari multifils, quan diversos fils volen modificar les mateixes dades, es produirà una inconsistència de dades. Per exemple, si dos fils volen modificar el mateix valor a les mateixes dades, els resultats poden ser inconsistents si el control és inadequat. En aquest moment, l'ús de l'objecte Lock pot aconseguir un accés mútuament exclusiu a les mateixes dades.

El següent és un exemple senzill, utilitzant Lock per implementar l'execució alternativa de dues fibres, i el valor de la variable compartida v no és 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()

Primer, es crea un objecte Lock, entra a la fibra f, adquireix el bloqueig, modifica la variable v i després allibera el bloqueig. Al fil principal, espereu que la fibra f s'acabi... Quan la fibra f allibera el bloqueig, el fil principal comença a adquirir el bloqueig i s'assegura que el valor de la variable v canvia a 300.

relació hereditària

%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ó de membre

acquire

Obteniu la propietat del pany

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

Paràmetres de trucada:

  • blocking: Booleà, especifica si s'ha d'esperar, esperar quan és cert, per defecte és cert

Resultats de retorn:

  • Boolean, retorna si el bloqueig s'ha adquirit correctament, true indica l'adquisició correcta.

El mètode d'adquisició s'utilitza per obtenir la propietat del bloqueig. Quan el bloqueig està en l'estat d'adquirir, aquest mètode retorna veritable immediatament.

Quan el bloqueig no es pot adquirir i el bloqueig és cert, la fibra actual s'entén. Quan altres fibres alliberen el bloqueig, aquest mètode torna cert.

Quan el bloqueig no es pot adquirir i el bloqueig és fals, el mètode retorna fals.


release

Allibera la propietat del pany

1
Lock.release();

Aquest mètode alliberarà la propietat del bloqueig o generarà un error si la fibra actual no és la propietària del bloqueig.


count

Consulta el nombre actual de tasques en espera

1
Integer Lock.count();

Resultats de retorn:

  • Integer, retorna el nombre de tasques

toString

Retorna la representació de cadena de l'objecte. En general, es retorna "[Objecte natiu]". L'objecte es pot tornar a implementar segons les seves pròpies característiques.

1
String Lock.toString();

Resultats de retorn:

  • String, retorna la representació de cadena de l'objecte

toJSON

Retorna una representació en format JSON de l'objecte, generalment retornant una col·lecció de propietats llegibles definides per l'objecte.

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

Paràmetres de trucada:

  • key: Corda, no utilitzada

Resultats de retorn:

  • Value, retorna un valor que conté JSON serializable