Objeto objeto incorporado

Semáforo objeto

Objeto de semáforo de fibra

El objeto semáforo maneja un contador interno, que disminuye en uno después de llamar adquirir o esperar, y aumenta en uno después de llamar liberar o publicar. El contador no disminuirá a un número negativo, porque adquirir y esperar dormirá la fibra actual cuando descubran que el valor es 0, hasta que otras fibras aumenten el valor del contador a través de la 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 la base de datos como ejemplo para limitar el uso concurrente 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 publica una señal, y el consumidor espera primero la señal, obtiene la señal y luego va a la cola para consultar y buscar los datos.

Herencia

Constructor

Semaphore

Constructor de semáforos

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

Liberar un semáforo, que es equivalente a liberar ()

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

Resultado devuelto:

  • 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

Resultado devuelto:

  • Boolean , devuelve si el bloqueo se adquirió con éxito, verdadero significa adquisición exitosa

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 inmediatamente.

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

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


release

Liberar propiedad de 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

Consulta el número actual de tareas en espera

1
Integer Semaphore.count();

Resultado devuelto:

  • 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 según sus propias características

1
String Semaphore.toString();

Resultado devuelto:

  • 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

Resultado devuelto:

  • Value , devuelve un valor que contiene JSON serializable