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
20var 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
Constructor
Lock
Constructor
1new Lock();
funció de membre
acquire
Obteniu la propietat del pany
1Boolean 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
1Lock.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
1Integer 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.
1String 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.
1Value Lock.toJSON(String key = "");
Paràmetres de trucada:
- key: Corda, no utilitzada
Resultats de retorn:
- Value, retorna un valor que conté JSON serializable