Objeto objeto integrado

Semáforo de objeto

Objeto 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 la adquisición y la espera dormirán la fibra actual cuando el valor sea 0, hasta que otras fibras aumenten el valor del contador mediante liberación o publicación.

Las ocasiones habituales de los semáforos son para 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 y colas juntos. 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

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 tiene éxito

acquire

Adquirir la propiedad de la cerradura

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

Parámetros de llamada:

  • blocking : booleano, especifique si esperar, esperar cuando sea verdadero, el valor predeterminado es verdadero

Devolver resultado:

  • Boolean , devuelve si el bloqueo se adquirió correctamente, verdadero significa adquisición satisfactoria

El método de adquisición se utiliza para adquirir la propiedad del bloqueo. Cuando el bloqueo 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 del bloqueo. Si la fibra actual no posee el bloqueo, este método arrojará un error.


count

Consultar el número actual de tareas en espera

1
Integer Semaphore.count();

Devolver resultado:

  • Integer , devuelve el número de tareas.

toString

Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", 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 : String, sin usar

Devolver resultado:

  • Value , devuelve un valor que contiene JSON serializable