Objecte objecte incorporat

ObjectSemàfor

objecte semàfor de fibra

L'objecte semàfor gestiona un comptador intern, que es disminueix en un després de trucar a l'adquirir o esperar, i augmentar en un després de trucar a l'alliberament o a la publicació. El comptador no disminuirà a un nombre negatiu, perquè quan adquireixi i espereu que el valor és 0, dormirà la fibra actual fins que altres fibres augmenten el valor del comptador mitjançant l'alliberament o la publicació.

Les ocasions d'ús habitual dels semàfors són limitar l'ús concurrent de recursos i l'aplicació del model productor/consumidor.

Preneu com a exemple les sol·licituds de bases de dades per limitar l'ús simultània dels 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ó productor/consumidor normalment utilitza semàfors amb cues. El productor afegeix dades a la cua i publica un senyal. El consumidor espera primer el senyal, rep el senyal i després va a la cua per consultar les dades.

relació hereditària

Constructor

Semaphore

constructor de semàfors

1
new Semaphore(Integer value = 1);

Paràmetres de trucada:

  • value: Enter, valor inicial del comptador

funció de membre

wait

esperar un semàfor

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

Paràmetres de trucada:

  • timeout: Sencer, especifica el temps d'espera en mil·lisegons. El valor predeterminat és -1, la qual cosa significa que no s'espera mai.

Resultats de retorn:

  • Boolean, retorna true si l'adquisició té èxit, retorna false si s'esgota el temps.

post

Allibera un semàfor, equivalent a release()

1
Semaphore.post();

trywait

Intenta adquirir un senyal. Si no es pot adquirir, tornarà immediatament i tornarà fals, que equival a adquirir(fals)

1
Boolean Semaphore.trywait();

Resultats de retorn:

  • Boolean, retorna true si l'adquisició té èxit, retorna false si s'esgota el temps.

acquire

Obteniu la propietat del pany

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

Paràmetres de trucada:

  • blocking: Booleà, especifica si s'ha d'esperar, esperar quan és cert, per defecte és cert

Resultats de retorn:

  • Boolean, retorna si el bloqueig s'ha adquirit correctament, true indica l'adquisició correcta.

El mètode d'adquisició s'utilitza per obtenir la propietat del bloqueig. Quan el bloqueig està en l'estat d'adquirir, aquest mètode retorna veritable immediatament.

Quan el bloqueig no es pot adquirir i el bloqueig és cert, la fibra actual s'entén. Quan altres fibres alliberen el bloqueig, aquest mètode torna cert.

Quan el bloqueig no es pot adquirir i el bloqueig és fals, el mètode retorna fals.


release

Allibera la propietat del pany

1
Semaphore.release();

Aquest mètode alliberarà la propietat del bloqueig o generarà un error si la fibra actual no és la propietària del bloqueig.


count

Consulta el nombre actual de tasques en espera

1
Integer Semaphore.count();

Resultats de retorn:

  • Integer, retorna el nombre de tasques

toString

Retorna la representació de cadena de l'objecte. En general, es retorna "[Objecte natiu]". L'objecte es pot tornar a implementar segons les seves pròpies característiques.

1
String Semaphore.toString();

Resultats de retorn:

  • String, retorna la representació de cadena de l'objecte

toJSON

Retorna una representació en format JSON de l'objecte, generalment retornant una col·lecció de propietats llegibles definides per l'objecte.

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

Paràmetres de trucada:

  • key: Corda, no utilitzada

Resultats de retorn:

  • Value, retorna un valor que conté JSON serializable