Oggetto oggetto incorporato

Semaforo oggetto

Oggetto semaforo in fibra

L'oggetto semaforo gestisce un contatore interno, che decresce di uno dopo la chiamata di acquisizione o attesa, e aumenta di uno dopo la chiamata di rilascio o post. Il contatore non diminuirà fino a un numero negativo, perché l'acquisizione e l'attesa dormiranno la fibra corrente quando scoprono che il valore è 0, finché altre fibre non incrementeranno il valore del contatore tramite rilascio o post.

Occasioni comuni per i semafori sono limitare l'uso simultaneo delle risorse e l'applicazione del modello produttore/consumatore.

Prendi le richieste di database come esempio per limitare l'uso simultaneo delle 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 prima attende il segnale, riceve il segnale e poi va alla coda per interrogare e recuperare i dati.

Eredità

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

Costruttore

Semaphore

Costruttore di semafori

1
new Semaphore(Integer value = 1);

Parametri di chiamata:

  • value: Intero, il valore iniziale del contatore

Funzione membro

wait

In attesa di un semaforo, equivalente ad acquisire (vero)

1
Semaphore.wait();

post

Rilascia un semaforo, che è equivalente a release()

1
Semaphore.post();

trywait

Prova ad acquisire un segnale, se non può essere acquisito, ritorna immediatamente e ritorna falso, che equivale ad acquisire (falso)

1
Boolean Semaphore.trywait();

Risultato di ritorno:

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

acquire

Acquisire la proprietà della serratura

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

Parametri di chiamata:

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

Risultato di ritorno:

  • Boolean, Restituisce se il blocco è stato acquisito con successo, true significa che l'acquisizione è andata a buon fine

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

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 è falso, il metodo restituisce false.


release

Rilascia proprietà 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 di attività attualmente in attesa

1
Integer Semaphore.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 re-implementato secondo le proprie caratteristiche

1
String Semaphore.toString();

Risultato di ritorno:

  • String, Restituisce la rappresentazione di stringa dell'oggetto

toJSON

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

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

Parametri di chiamata:

  • key: Stringa, inutilizzata

Risultato di ritorno:

  • Value, Restituisce un valore contenente JSON serializzabile