Oggetto oggetto incorporato

Blocco oggetto

Lock è un oggetto integrato che può essere utilizzato per controllare l'accesso simultaneo alle fibre. È possibile acquisire un lock attraverso una fibra per impedire ad altre fibre di acquisirlo contemporaneamente. Il blocco può passarecoroutine.Lock() creazione di funzioni

Una situazione comune è che in uno scenario multi-thread, quando più thread desiderano modificare gli stessi dati, si verifica un'incoerenza dei dati. Ad esempio, se due thread desiderano modificare lo stesso valore negli stessi dati, i risultati potrebbero essere incoerenti se il controllo non è corretto. In questo momento, utilizzando l'oggetto Lock è possibile ottenere un accesso mutuamente esclusivo agli stessi dati.

Quello che segue è un semplice esempio di utilizzo di Lock per implementare l'esecuzione alternata di due fibre e il valore della variabile condivisa 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()

Per prima cosa viene creato un oggetto Lock, entra nella fibra f, acquisisce il lock, modifica la variabile v, e poi rilascia il lock. Nel thread principale, attendere il completamento della fibra f... Quando la fibra f rilascia il Lock, il thread principale inizia ad acquisire il Lock e ad assicurarsi che il valore della variabile v venga modificato in 300.

rapporto ereditario

%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

Costruttore

Lock

Costruttore

1
new Lock();

funzione membro

acquire

Ottieni la proprietà della serratura

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

Parametri di chiamata:

  • blocking: Booleano, specifica se attendere, attendere quando vero, il valore predefinito è vero

Risultati restituiti:

  • Boolean, restituisce se il blocco è stato acquisito con successo, true indica l'acquisizione riuscita.

Il metodo acquire viene utilizzato per ottenere la proprietà del blocco. Quando il blocco è nello stato acquisibile, questo metodo restituisce immediatamente true.

Quando il blocco non può essere acquisito e il blocco è vero, la fibra corrente va in modalità sospensione. Quando altre fibre rilasciano il blocco, questo metodo restituisce vero.

Quando il blocco non può essere acquisito e il blocco è false, il metodo restituisce false.


release

Rilascia la proprietà della serratura

1
Lock.release();

Questo metodo rilascerà la proprietà del blocco o genererà un errore se la fibra corrente non possiede il blocco.


count

Interroga il numero corrente di attività in attesa

1
Integer Lock.count();

Risultati restituiti:

  • Integer, restituisce il numero di attività

toString

Restituisce la rappresentazione in formato stringa dell'oggetto. Generalmente viene restituito "[Oggetto nativo]". L'oggetto può essere reimplementato in base alle proprie caratteristiche.

1
String Lock.toString();

Risultati restituiti:

  • String, restituisce la rappresentazione di stringa dell'oggetto

toJSON

Restituisce una rappresentazione in formato JSON dell'oggetto, generalmente restituendo una raccolta di proprietà leggibili definite dall'oggetto.

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

Parametri di chiamata:

  • key: Stringa, non utilizzata

Risultati restituiti:

  • Value, restituisce un valore contenente JSON serializzabile