Oggetto oggetto incorporato

Semaforo di oggetti

Oggetto semaforo in fibra

L'oggetto semaforo gestisce un contatore interno, che diminuisce di uno dopo aver chiamato acquisisci o attendi e incrementa di uno dopo aver chiamato rilascio o post. Il contatore non verrà ridotto a un numero negativo, poiché acquisisci e attendi scoprirà che il valore corrente è 0, dormirà la fibra corrente, fino a quando altre fibre attraverso il rilascio o la post aumenteranno il valore del contatore.

Le situazioni comuni in cui vengono utilizzati i semafori sono di limitare l'uso concomitante di risorse e l'applicazione di modelli produttore / consumatore.

Prendi la richiesta del database come esempio per limitare l'uso simultaneo di risorse:

1 2 3 4 5 6 7 8 9 10
var maxconnections = 5; var l = new coroutine.Semaphore(maxconnections); ...... l.acquire(); var conn = connectdb() ..... conn.close(); l.release();

Il modello produttore / consumatore di solito utilizza i semafori insieme alle code. Il produttore aggiunge i dati alla coda e invia un segnale, e il consumatore attende prima il segnale, quindi ottiene il segnale e quindi interroga la coda per recuperare i dati.

Eredità

Costruttore

Semaphore

Costruttore di semafori

1
new Semaphore(Integer value = 1);

Parametri di chiamata:

  • value : intero, il valore iniziale del contatore

Funzione membro

wait

Aspettando un semaforo, equivalente ad acquisire (vero)

1
Semaphore.wait();

post

Rilascia un semaforo, equivalente a release ()

1
Semaphore.post();

trywait

Prova a ottenere un segnale, se non riesce a ottenerlo, quindi restituisci immediatamente e restituisce false, che equivale ad acquisire (false)

1
Boolean Semaphore.trywait();

Risultato di ritorno:

  • Boolean , vero se ha successo

acquire

Assumi la proprietà della serratura

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

Parametri di chiamata:

  • key : stringa, non utilizzata

Risultato di ritorno:

  • Value , restituisce un valore contenente serializzabile JSON