Oggetto oggetto incorporato

Semaforo oggetto

Oggetto semaforo in fibra

L'oggetto semaforo gestisce un contatore interno, che diminuisce di uno dopo aver chiamato acquisire o wait e aumenta di uno dopo aver chiamato release o post. Il contatore non diminuirà a un numero negativo, perché acquisisci e aspetta dormirà la fibra corrente quando il valore è 0, fino a quando le altre fibre aumenteranno 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 semafori e code insieme. Il produttore aggiunge i dati alla coda e invia un segnale, e il consumatore attende prima il segnale, riceve il segnale e poi va in coda per interrogare e recuperare i dati.

Eredità

Costruttore

Semaphore

Costruttore di semafori

1
new Semaphore(Integer value = 1);

Parametri di chiamata:

  • value : Integer, il valore iniziale del contatore

Funzione membro

wait

Aspettando 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, torna immediatamente e restituisci falso, che equivale ad acquisire (falso)

1
Boolean Semaphore.trywait();

Risultato di ritorno:

  • Boolean , restituisce true in caso di successo

acquire

Acquisisci la proprietà del blocco

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

  • 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 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, non utilizzata

Risultato di ritorno:

  • Value , restituisce un valore contenente JSON serializzabile