Oggetto oggetto incorporato

OggettoSemaforo

oggetto semaforo in fibra

L'oggetto semaforo gestisce un contatore interno, che viene decrementato di uno dopo la chiamata acquire o wait, e incrementato di uno dopo la chiamata release o post. Il contatore non diminuirà fino a un numero negativo, perché quando l'acquisizione e l'attesa rilevano che il valore è 0, metteranno in pausa la fibra corrente finché altre fibre non aumenteranno il valore del contatore tramite rilascio o post.

Le occasioni comunemente usate per i semafori sono limitare l'uso simultaneo delle risorse e l'applicazione del modello produttore/consumatore.

Prendiamo come esempio le richieste del database 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 solitamente utilizza semafori con code. Il produttore aggiunge dati alla coda e invia un segnale. Il consumatore prima attende il segnale, riceve il segnale e poi va in coda per interrogare i dati.

rapporto ereditario

Costruttore

Semaphore

costruttore del semaforo

1
new Semaphore(Integer value = 1);

Parametri di chiamata:

  • value: Intero, valore iniziale del contatore

funzione membro

wait

aspettare un semaforo

1
Boolean Semaphore.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.

post

Rilascia un semaforo, equivalente a release()

1
Semaphore.post();

trywait

Prova ad acquisire un segnale, se non può essere acquisito, restituirà immediatamente e restituirà false, che equivale ad acquire(false)

1
Boolean Semaphore.trywait();

Risultati restituiti:

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

acquire

Ottieni la proprietà della serratura

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

Parametri di chiamata:

  • key: Stringa, non utilizzata

Risultati restituiti:

  • Value, restituisce un valore contenente JSON serializzabile