Oggetto oggetto incorporato

Condizione dell'oggetto

Oggetto variabile di condizione

Le variabili di condizione sono un meccanismo che utilizza variabili globali condivise tra le fibre per la sincronizzazione. Include principalmente due azioni: 1) Un thread attende che una certa condizione venga stabilita e si sospende; 2) Un altro thread fa sì che la condizione venga stabilita, E comunica alla fibra in attesa di eseguire verso il basso.

Al fine di prevenire la concorrenza, ogni variabile di condizione necessita di un Lock (il Lock può essere creato e passato in modo esplicito da solo, oppure può essere creato da fibjs per te)

Utilizzando le variabili di condizione, una variabile di condizione può essere utilizzata per controllare il cambio di un lotto di fibre;

Di seguito sono riportati due esempi di schedulazione in 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);

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 di variabili di condizione

1
new Condition(Lock lock);

Parametri di chiamata:

  • lock : Lock , usa una serratura auto-costruita

Funzione membro

wait

Metti la fibra in uno stato di blocco

1
Condition.wait();

notify

Informare una fibra bloccata (quella che si è unita per ultima al pool di fibre) per 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

Acquisisci la proprietà del blocco

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

Parametri di chiamata:

  • blocking : Boolean, specifica se aspettare, aspetta quando è vero, il valore predefinito è vero

Risultato di ritorno:

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

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

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

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


release

Rilascia 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:

  • Integer , restituisce il numero di attività

toString

Restituisce la rappresentazione in stringa dell'oggetto, generalmente restituisce "[Native Object]", l'oggetto può essere reimplementato secondo le proprie caratteristiche

1
String Condition.toString();

Risultato di ritorno:

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

toJSON

Restituisce la rappresentazione in formato JSON dell'oggetto, generalmente 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 JSON serializzabile