Objeto incorporado

ObjetoSemáforo

objeto de semáforo de fibra

El objeto semáforo gestiona un contador interno, que se reduce en uno después de llamar a adquirir o esperar, y se incrementa en uno después de llamar a liberar o publicar. El contador no disminuirá a un número negativo, porque cuando la adquisición y la espera descubren que el valor es 0, suspenderán la fibra actual hasta que otras fibras aumenten el valor del contador mediante liberación o publicación.

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

Tome las solicitudes de bases 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 patrón productor/consumidor suele utilizar semáforos con colas. El productor agrega datos a la cola y publica una señal, el consumidor primero espera la señal, la obtiene y luego va a la cola para consultar los datos.

relación de herencia

Constructor

Semaphore

constructor de semáforos

1
new Semaphore(Integer value = 1);

Parámetros de llamada:

  • value: Entero, valor inicial del contador

función miembro

wait

espera un semáforo

1
Boolean Semaphore.wait(Integer timeout = -1);

Parámetros de llamada:

  • timeout: Entero, especifica el tiempo de espera en milisegundos. El valor predeterminado es -1, lo que significa que nunca expirará.

Resultados de devolución:

  • Boolean, devuelve verdadero si la adquisición es exitosa, devuelve falso si se agota el tiempo de espera.

post

Liberar un semáforo, equivalente a liberar()

1
Semaphore.post();

trywait

Intente adquirir una señal, si no se puede adquirir, regresará inmediatamente y devolverá falso, lo que equivale a adquirir (falso)

1
Boolean Semaphore.trywait();

Resultados de devolución:

  • Boolean, devuelve verdadero si la adquisición es exitosa, devuelve falso si se agota el tiempo de espera.

acquire

Obtener la propiedad de la cerradura

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

Parámetros de llamada:

  • blocking: Booleano, especifica si se debe esperar, esperar cuando sea verdadero, el valor predeterminado es verdadero

Resultados de devolución:

  • Boolean, devuelve si el bloqueo se adquirió correctamente; verdadero indica que la adquisición se realizó correctamente.

El método de adquisición se utiliza para obtener la propiedad del candado. Cuando el candado está en estado adquirible, este método devuelve verdadero inmediatamente.

Cuando no se puede adquirir el bloqueo y el bloqueo es verdadero, la fibra actual entra en modo de suspensión. Cuando otras fibras liberan el bloqueo, este método devuelve verdadero.

Cuando no se puede adquirir el bloqueo y el bloqueo es falso, el método devuelve falso.


release

Liberar la propiedad de la cerradura

1
Semaphore.release();

Este método liberará la propiedad del candado o generará un error si la fibra actual no es propietaria del candado.


count

Consultar el número actual de tareas en espera.

1
Integer Semaphore.count();

Resultados de devolución:

  • Integer, devuelve el número de tareas

toString

Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.

1
String Semaphore.toString();

Resultados de devolución:

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

toJSON

Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.

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

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable