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
10var 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
1new Semaphore(Integer value = 1);
Paràmetres de trucada:
- value: Enter, valor inicial del comptador
funció de membre
wait
esperar un semàfor
1Boolean 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()
1Semaphore.post();
trywait
Intenta adquirir un senyal. Si no es pot adquirir, tornarà immediatament i tornarà fals, que equival a adquirir(fals)
1Boolean 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
1Boolean 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
1Semaphore.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
1Integer 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.
1String 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.
1Value Semaphore.toJSON(String key = "");
Paràmetres de trucada:
- key: Corda, no utilitzada
Resultats de retorn:
- Value, retorna un valor que conté JSON serializable