Obxecto incorporado

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 10
var 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

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

Construtor

Semaphore

Construtor de semáforos

1
new 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)

1
Semaphore.wait();

post

Liberar un semáforo, que equivale a release ()

1
Semaphore.post();

trywait

Tenta adquirir un sinal. Se non se pode adquirir, devolve inmediatamente e devolve false, o que equivale a adquirir (false)

1
Boolean Semaphore.trywait();

Resultado de volta:

  • Boolean, Devolve verdadeiro se a adquisición ten éxito

acquire

Adquirir a propiedade da pechadura

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

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

1
Integer 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

1
String 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

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

Parámetros de chamada:

  • key: Cadea, sen usar

Resultado de volta:

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