Objeto objeto incorporado

Semáforo objeto

Objeto de semáforo de fibra

El objeto de semáforo gestiona un contador interno. Este contador se disminuye en uno después de adquirir o esperar, y se incrementa en uno después de que se llama la liberación o publicación. El contador no disminuirá a un número negativo, porque adquirir y esperar dormirá la fibra actual cuando encuentre un valor de 0, hasta que otras fibras aumenten el valor del contador a través de la liberación o publicación.

Los semáforos se usan a menudo para limitar el uso concurrente de recursos y aplicaciones en el modo productor / consumidor.

Tome la solicitud 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();

Los modelos de productor / consumidor generalmente usan semáforos con colas. El productor agrega datos a la cola y publica una señal, y el consumidor espera primero la señal y luego consulta los datos después de recibir la señal.

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, equivalente a liberar ()

1
Semaphore.post();

trywait

Intente obtener una señal, si no puede obtenerla, regrese de inmediato y devuelva falso, equivalente a adquirir (falso)

1
Boolean Semaphore.trywait();

Devuelve el resultado:

  • Boolean , devuelve verdadero si tiene éxito

acquire

Obtención de propiedad de bloqueo

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

Parámetros de llamada:

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

Devuelve el resultado:

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

El método de adquisición se utiliza para adquirir la propiedad del bloqueo. Este método devuelve verdadero inmediatamente cuando el bloqueo está en un estado adquirible.

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 devuelve verdadero.

Cuando el bloqueo no está disponible 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 bloqueo. Si la fibra actual no posee el bloqueo, este método arrojará un error.


count

Consulta el número de tareas actualmente en espera

1
Integer Semaphore.count();

Devuelve el resultado:

  • Integer , devuelve el número de tareas

toString

Devuelve una representación de cadena del objeto, generalmente "[Objeto nativo]". Los objetos se pueden volver a implementar de acuerdo con sus propias características

1
String Semaphore.toString();

Devuelve el resultado:

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

toJSON

Devuelve una representación 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, sin usar

Devuelve el resultado:

  • Value , devuelve un valor que contiene un JSON serializable