Objeto objeto integrado

Semáforo de objeto

Objeto de semáforo de fibra

El objeto semáforo administra un contador interno, que disminuye en uno después de llamar a adquirir o esperar, y aumenta en uno después de llamar a liberar o publicar. El contador no disminuirá a un número negativo, porque adquirir y esperar dormirán la fibra actual cuando encuentren que el valor es 0, hasta que otras fibras aumenten el valor del contador mediante liberación o publicación.

Las ocasiones comunes para los semáforos son limitar el uso concurrente de recursos y la aplicación del modelo productor / consumidor.

Tome las solicitudes de base de datos como ejemplo para limitar el 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();

El modelo productor / consumidor generalmente usa semáforos junto con colas. El productor agrega datos a la cola y envía una señal, y el consumidor espera la señal primero, recibe la señal y luego va a la cola para consultar y buscar los datos.

Herencia

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

Constructor

Semaphore

Constructor de semáforo

1
new Semaphore(Integer value = 1);

Parámetros de llamada:

  • value: Entero, el valor inicial del contador

Función miembro

wait

Esperando un semáforo, equivalente a adquirir (verdadero)

1
Semaphore.wait();

post

Suelta un semáforo, que es equivalente a release ()

1
Semaphore.post();

trywait

Intente adquirir una señal, si no se puede adquirir, regrese inmediatamente y devuelva falso, que es equivalente a adquirir (falso)

1
Boolean Semaphore.trywait();

Devolver resultado:

  • Boolean, Devuelve verdadero si la adquisición se realiza correctamente

acquire

Adquirir la propiedad de la cerradura

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

Parámetros de llamada:

  • blocking: Booleano, especifique si esperar, si es verdadero, espere, el valor predeterminado es verdadero

Devolver resultado:

  • Boolean, Devuelve si el bloqueo se adquirió con éxito, verdadero significa que la adquisición se realizó correctamente

El método de adquisición se utiliza para adquirir la propiedad de la cerradura. Cuando la cerradura está en un estado adquirible, este método devuelve verdadero de inmediato.

Cuando el bloqueo no está disponible y el bloqueo es verdadero, la fibra actual entra en suspensión. Cuando otras fibras liberan el bloqueo, este método vuelve verdadero.

Cuando el bloqueo no está disponible y el bloqueo es falso, el método devuelve falso.


release

Liberar la propiedad del bloqueo

1
Semaphore.release();

Este método liberará la propiedad de la cerradura. Si la fibra actual no es propietaria de la cerradura, este método arrojará un error.


count

Consultar el número de tareas en espera actualmente

1
Integer Semaphore.count();

Devolver resultado:

  • Integer, Devuelve el número de tareas

toString

Devuelve la representación en cadena del objeto, generalmente devuelve "[Native Object]", el objeto se puede volver a implementar de acuerdo con sus propias características

1
String Semaphore.toString();

Devolver resultado:

  • String, Devuelve la representación de cadena del objeto

toJSON

Devuelve la representación en formato JSON del objeto, generalmente devuelve una colección de atributos legibles definidos por el objeto

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

Parámetros de llamada:

  • key: Cadena, sin usar

Devolver resultado:

  • Value, Devuelve un valor que contiene JSON serializable