Oggetto oggetto incorporato

Condizione dell'oggetto

Oggetto variabile condizione

Le variabili condizionali sono un meccanismo per la sincronizzazione che utilizza variabili globali condivise tra le fibre. Includono principalmente due azioni: 1) un thread attende che venga stabilita una determinata condizione e si sospende; 2) un altro thread rende vera la condizione, E avvisare la fibra in attesa di eseguire verso il basso.

Al fine di prevenire la concorrenza, ogni variabile di condizione richiede la collaborazione di un Lock (il Lock può essere esplicitamente creato e trasmesso da solo o può essere creato da fibjs per te)

Utilizzando variabili di condizione, è possibile utilizzare una variabile di condizione per controllare un batch di switch di fibra;

Di seguito sono riportati due esempi di pianificazione delle fibre:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var coroutine = require("coroutine"); var cond = new coroutine.Condition(); var ready = false; var state = "ready"; function funcwait() { cond.acquire(); while (!ready) cond.wait(); state = "go" cond.release(); } coroutine.start(funcwait); cond.acquire(); console.log(state) ready = true; cond.notify(); coroutine.sleep(); console.log(state);

produrrà:

1 2
ready go

Eredità

Costruttore

Condition

Costruttore della variabile di condizione (il blocco richiesto dalla variabile di condizione è costruito internamente da fibjs)

1
new Condition();

Costruttore variabile condizionale

1
new Condition(Lock lock);

Parametri di chiamata:

  • lock : Lock , utilizzare Lock auto-costruito

Funzione membro

wait

Metti la fibra nello stato bloccato

1
Condition.wait();

notify

Notifica una fibra bloccata (infine aggiunta al pool di fibre) per continuare l'esecuzione

1
Condition.notify();

notifyAll

Notifica a tutte le fibre bloccate di continuare l'esecuzione

1
Condition.notifyAll();

acquire

Assumi la proprietà della serratura

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

Parametri di chiamata:

  • blocking : booleano, specificare se attendere, attendere se vero, il valore predefinito è vero

Risultato di ritorno:

  • Boolean , restituisce se il blocco è stato acquisito correttamente, vero significa acquisizione corretta

Il metodo di acquisizione viene utilizzato per acquisire la proprietà del blocco. Quando il blocco è in uno stato acquisibile, questo metodo restituisce immediatamente il valore.

Quando il blocco non è disponibile e il blocco è vero, la fibra corrente entra in modalità di sospensione. Quando altre fibre rilasciano il blocco, questo metodo restituisce vero.

Quando il blocco non è disponibile e il blocco è falso, il metodo restituisce falso.


release

Rilasciare la proprietà del blocco

1
Condition.release();

Questo metodo rilascerà la proprietà del blocco. Se la fibra corrente non possiede il blocco, questo metodo genererà un errore.


count

Interroga il numero corrente di attività in attesa

1
Integer Condition.count();

Risultato di ritorno:

  • Numero Integer , restituisce il numero di attività

toString

Restituisce la rappresentazione in forma di stringa dell'oggetto, in genere restituisce "[Native Object]", l'oggetto può essere reimplementato in base alle proprie caratteristiche

1
String Condition.toString();

Risultato di ritorno:

  • String , restituisce una rappresentazione in formato stringa dell'oggetto

toJSON

Restituisce la rappresentazione in formato JSON dell'oggetto, in genere restituisce una raccolta di attributi leggibili definiti dall'oggetto

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

Parametri di chiamata:

  • key : stringa, non utilizzata

Risultato di ritorno:

  • Value , restituisce un valore contenente serializzabile JSON