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
10var 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
1new Semaphore(Integer value = 1);
Parámetros de chamada:
- value: Enteiro, valor inicial do contador
función de membro
wait
agardar por un semáforo
1Boolean 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()
1Semaphore.post();
trywait
Intente adquirir un sinal. Se non se pode adquirir, volverá inmediatamente e devolverá false, o que equivale a adquirir(false)
1Boolean 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
1Boolean 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
1Semaphore.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
1Integer 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.
1String 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.
1Value 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