Oggetto oggetto incorporato

Condizione oggetto

oggetto variabile di condizione

Le variabili di condizione sono un meccanismo che utilizza variabili globali condivise tra le fibre per la sincronizzazione. Comprende principalmente due azioni: 1) Un thread attende che una determinata condizione sia vera e si sospende; 2) Un altro thread rende vera la condizione e notifica l'attesa fibra per eseguire verso il basso.

Per prevenire le gare, ogni variabile di condizione necessita di aLockcooperazione (LockPuoi crearlo esplicitamente tu stesso e passarlo oppure puoi lasciare che fibjs lo crei per te)

Utilizzando le variabili di condizione, è possibile utilizzare una variabile di condizione per controllare la commutazione di un lotto di fibre;

Di seguito sono riportati due esempi di pianificazione della fibra:

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);

restituirà:

1 2
ready go

rapporto ereditario

Costruttore

Condition

Costruttore di variabili di condizione (il blocco richiesto per la variabile di condizione è costruito internamente da fibjs)

1
new Condition();

costruttore della variabile di condizione

1
new Condition(Lock lock);

Parametri di chiamata:

  • lock:Lock, utilizzando serrature autocostruite

funzione membro

wait

attendere una variabile di condizione

1
Boolean Condition.wait(Integer timeout = -1);

Parametri di chiamata:

  • timeout: Numero intero, specifica il timeout in millisecondi. Il valore predefinito è -1, il che significa che non scadrà mai.

Risultati restituiti:

  • Boolean, restituisce true se l'acquisizione ha esito positivo, restituisce false se scade.

notify

Notifica a una fibra bloccata (l'ultima aggiunta al pool di fibre) di continuare l'esecuzione verso il basso

1
Condition.notify();

notifyAll

Avvisare tutte le fibre bloccate di continuare l'esecuzione verso il basso

1
Condition.notifyAll();

acquire

Ottieni la proprietà della serratura

1
Boolean Condition.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
Condition.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 Condition.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 Condition.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 Condition.toJSON(String key = "");

Parametri di chiamata:

  • key: Stringa, non utilizzata

Risultati restituiti:

  • Value, restituisce un valore contenente JSON serializzabile