Objecte objecte incorporat

ObjectSemàfor

Objecte semàfor de fibra

L'objecte semàfor gestiona un comptador intern que es disminueix mitjançant l'adquisició o l'espera i s'incrementa per l'alliberament o la publicació. El comptador no disminuirà a un nombre negatiu, perquè l'adquisició i l'espera s'activarà la fibra actual quan el valor sigui 0 fins que altres fibres augmentin el valor del comptador mitjançant l'alliberament o la publicació.

Els semàfors s'utilitzen habitualment en aplicacions que limiten l'ús concurrent de recursos i el patró 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 juntament amb cues. El productor afegeix dades a la cua i publica un senyal, i el consumidor espera primer el senyal i després va a la cua per consultar les dades després d'obtenir el senyal.

relació hereditària

#lineWidth: 1.5 #font: Helvetica,sans-Serif #fontSize: 10 #leading: 1.6 #.this: fill=lightgray #.class: fill=white [<class>object|toString();toJSON()] [<class>Lock|new Lock()|acquire();release();count()] [<this>Semaphore|new Semaphore()|wait();post();trywait()] [object] <:- [Lock] [Lock] <:- [Semaphore] Lock new Lock() acquire() release() count() Semaphore new Semaphore() wait() post() trywait() object toString() toJSON()

Constructor

Semaphore

Constructor de semàfors

1
new Semaphore(Integer value = 1);

Paràmetres de trucada:

  • value: Enter, el valor inicial del comptador

funció de membre

wait

Espereu un semàfor, equivalent a adquirir(true)

1
Semaphore.wait();

post

Allibera un semàfor, equivalent a release()

1
Semaphore.post();

trywait

Intenteu adquirir un senyal, si no es pot adquirir, tornarà immediatament i tornarà fals, que equival a adquirir(fals)

1
Boolean Semaphore.trywait();

Resultat de retorn:

  • Boolean, retorna true si l'adquisició té èxit

acquire

prendre possessió del pany

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

Paràmetres de trucada:

  • blocking: booleà, especifiqueu si s'ha d'esperar, esperar si és cert, per defecte és cert

Resultat de retorn:

  • Boolean, Retorna si el bloqueig s'ha adquirit correctament, true significa que l'adquisició ha estat correcta

El mètode d'adquisició s'utilitza per adquirir 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 i generarà un error si el bloqueig no és propietat de la fibra actual.


count

Consulta el nombre actual de tasques en espera

1
Integer Semaphore.count();

Resultat de retorn:

  • Integer, retorna el nombre de tasques

toString

Retorna la representació de cadena de l'objecte, generalment retorna "[Native Object]", l'objecte es pot reimplementar segons les seves pròpies característiques

1
String Semaphore.toString();

Resultat de retorn:

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

toJSON

Retorna la representació en format JSON de l'objecte, generalment retorna el conjunt de propietats llegibles definides per l'objecte

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

Paràmetres de trucada:

  • key: Corda, sense utilitzar

Resultat de retorn:

  • Value, retorna un valor que conté JSON serializable