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
21var 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
2ready
go
rapporto ereditario
Costruttore
Condition
Costruttore di variabili di condizione (il blocco richiesto per la variabile di condizione è costruito internamente da fibjs)
1new Condition();
costruttore della variabile di condizione
1new Condition(Lock lock);
Parametri di chiamata:
- lock:Lock, utilizzando serrature autocostruite
funzione membro
wait
attendere una variabile di condizione
1Boolean 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
1Condition.notify();
notifyAll
Avvisare tutte le fibre bloccate di continuare l'esecuzione verso il basso
1Condition.notifyAll();
acquire
Ottieni la proprietà della serratura
1Boolean 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
1Condition.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
1Integer 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.
1String 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.
1Value Condition.toJSON(String key = "");
Parametri di chiamata:
- key: Stringa, non utilizzata
Risultati restituiti:
- Value, restituisce un valore contenente JSON serializzabile