Semaforo de obxectos
Obxecto de semáforo de fibra
O obxecto semáforo xestiona un contador interno, que diminúe un despois de chamar adquirir ou esperar, e aumenta un despois de chamar a liberación ou publicación. O contador non diminuirá ata un número negativo, porque adquirir e esperar durmirá a fibra actual cando descubran que o valor é 0, ata que outras fibras aumenten o valor do contador a través da liberación ou publicación.
As ocasións comúns para os 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 modelo produtor / consumidor adoita empregar semáforos xunto coas colas. O produtor engade datos á cola e publica un sinal e o consumidor agarda primeiro polo sinal, recibe o sinal e despois vai á cola para consultar e buscar os datos.
Herdanza
Construtor
Semaphore
Construtor de semáforos
1new Semaphore(Integer value = 1);
Parámetros de chamada:
- value: Enteiro, o valor inicial do contador
Función de membro
wait
Agardando un semáforo, equivalente a adquirir (verdadeiro)
1Semaphore.wait();
post
Liberar un semáforo, que equivale a release ()
1Semaphore.post();
trywait
Tente adquirir un sinal, se non se pode adquirir, devolve inmediatamente e devolve falso, o que equivale a adquirir (falso)
1Boolean Semaphore.trywait();
Resultado de volta:
- Boolean, Devolve verdadeiro se a adquisición ten éxito
acquire
Adquirir a propiedade da pechadura
1Boolean Semaphore.acquire(Boolean blocking = true);
Parámetros de chamada:
- blocking: Booleano, especifica se agardar, se é verdade, agarda, o predeterminado é verdadeiro
Resultado de volta:
- Boolean, Devolve se o bloqueo se adquiriu correctamente, o que significa que a adquisición é correcta
O método de adquisición úsase para adquirir a propiedade do bloqueo. Cando o bloqueo está nun estado que se pode adquirir, este método devolve a verdade inmediatamente.
Cando o bloqueo non está dispoñible e o bloqueo é verdadeiro, a fibra actual queda en suspensión. Cando outras fibras soltan o bloqueo, este método devólvese verdadeiro.
Cando o bloqueo non está dispoñible e o bloqueo é falso, o método devolve falso.
release
Liberar a propiedade do bloqueo
1Semaphore.release();
Este método liberará a propiedade do bloqueo. Se a fibra actual non é propietaria do bloqueo, este método producirá un erro.
count
Consulte o número de tarefas en espera actualmente
1Integer Semaphore.count();
Resultado de volta:
- Integer, Devolve o número de tarefas
toString
Devolve a representación de cadea do obxecto, xeralmente devolve "[Obxecto nativo]", o obxecto pode reimplementarse segundo as súas propias características
1String Semaphore.toString();
Resultado de volta:
- String, Devolve a representación de cadea do obxecto
toJSON
Devolve a representación en formato JSON do obxecto, xeralmente devolve unha colección de atributos lexibles definidos polo obxecto
1Value Semaphore.toJSON(String key = "");
Parámetros de chamada:
- key: Cadea, sen usar
Resultado de volta:
- Value, Devolve un valor que contén JSON serializable