Obxecto obxecto incorporado

ObxectoSemáforo

obxecto semáforo de fibra

O obxecto semáforo xestiona un contador interno, que se reduce nun un despois de chamar a adquirir ou esperar, e se incrementa nun segundo despois de chamar a release ou post. O contador non diminuirá a un número negativo, xa que cando adquiran e agarden que o valor é 0, durmirán a fibra actual ata que outras fibras aumenten o valor do contador mediante a liberación ou a publicación.

As ocasións de uso habitual dos semáforos son limitar o uso simultáneo de recursos e a aplicación do modelo produtor/consumidor.

Tome as solicitudes de bases de datos como exemplo para limitar o uso simultáneo de recursos:

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();

O patrón produtor/consumidor normalmente usa semáforos con filas. O produtor engade datos á cola e publica un sinal. O consumidor agarda primeiro o sinal, recibe o sinal e despois vai á cola para consultar os datos.

relación de herdanza

Construtor

Semaphore

constructor de semáforos

1
new Semaphore(Integer value = 1);

Parámetros de chamada:

  • value: Enteiro, valor inicial do contador

función de membro

wait

agardar por un semáforo

1
Boolean Semaphore.wait(Integer timeout = -1);

Parámetros de chamada:

  • timeout: Número enteiro, especifica o tempo de espera en milisegundos. O valor predeterminado é -1, o que significa que nunca se agotará.

Resultados de devolución:

  • Boolean, devolve verdadeiro se a adquisición é exitosa, devolve false se supera o tempo de espera.

post

Liberar un semáforo, equivalente a release()

1
Semaphore.post();

trywait

Intente adquirir un sinal. Se non se pode adquirir, volverá inmediatamente e devolverá false, o que equivale a adquirir(false)

1
Boolean Semaphore.trywait();

Resultados de devolución:

  • Boolean, devolve verdadeiro se a adquisición é exitosa, devolve false se supera o tempo de espera.

acquire

Obter a propiedade da pechadura

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

Parámetros de chamada:

  • blocking: Booleano, especifica se esperar, esperar cando é verdadeiro, o predeterminado é verdadeiro

Resultados de devolución:

  • Boolean, devolve se o bloqueo foi adquirido correctamente, verdadeiro indica que a adquisición foi exitosa.

O método de adquisición utilízase para obter a propiedade do bloqueo. Cando o bloqueo está no estado adquirible, este método devolve verdadeiro inmediatamente.

Cando o bloqueo non se pode adquirir e o bloqueo é verdadeiro, a fibra actual pasa a durmir. Cando outras fibras liberan o bloqueo, este método devolve verdadeiro.

Cando o bloqueo non se pode adquirir e o bloqueo é falso, o método devolve false.


release

Libera a propiedade do bloqueo

1
Semaphore.release();

Este método liberará a propiedade do bloqueo ou producirá un erro se a fibra actual non posúe o bloqueo.


count

Consulta o número actual de tarefas en espera

1
Integer Semaphore.count();

Resultados de devolución:

  • Integer, devolve o número de tarefas

toString

Devolve a representación en cadea do obxecto. Polo xeral, devólvese "[Obxecto nativo]". O obxecto pódese volver implementar segundo as súas propias características.

1
String Semaphore.toString();

Resultados de devolución:

  • String, devolve a representación en cadea do obxecto

toJSON

Devolve unha representación en formato JSON do obxecto, devolvendo xeralmente unha colección de propiedades lexibles definidas polo obxecto.

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

Parámetros de chamada:

  • key: Cadena, non usada

Resultados de devolución:

  • Value, devolve un valor que contén JSON serializable