Objecte objecte incorporat

Semàfor d'objectes

Objecte de semàfor de fibra

L’objecte semàfor gestiona un comptador intern, que disminueix un després de trucar a l’adquisició o espera, i augmenta un després de trucar al llançament o publicar. El comptador no disminuirà fins a un nombre negatiu, ja que l’adquisició i l’espera faran que la fibra actual es posi en suspensió quan trobi que el valor és 0, fins que altres fibres augmentin el valor del comptador mitjançant el llançament o la publicació.

Les ocasions habituals dels semàfors són limitar l’ús simultani de recursos i l’aplicació del model productor / consumidor.

Preneu com a exemple les sol·licituds de base de dades per limitar l’ús simultani 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 model productor / consumidor sol utilitzar semàfors juntament amb cues. El productor afegeix dades a la cua i publica un senyal i el consumidor espera primer el senyal, obté el senyal i després va a la cua per consultar i obtenir les dades.

Herència

#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àfor

1
new Semaphore(Integer value = 1);

Paràmetres de trucada:

  • value: Enter, el valor inicial del comptador

Funció de membre

wait

Esperant un semàfor, equivalent a adquirir (cert)

1
Semaphore.wait();

post

Allibera un semàfor, que equival a release ()

1
Semaphore.post();

trywait

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

1
Boolean Semaphore.trywait();

Resultat de retorn:

  • Boolean, Torneu a cert si l'adquisició té èxit

acquire

Adquiriu la propietat del pany

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

Paràmetres de trucada:

  • blocking: Booleà, especifiqueu si cal esperar; si és cert, espereu, el valor per defecte és cert

Resultat de retorn:

  • Boolean, Torna si el bloqueig s'ha adquirit correctament, és cert que l'adquisició s'ha realitzat correctament

El mètode d’adquisició s’utilitza per adquirir la propietat del pany. Quan el pany es troba en un estat que es pot adquirir, aquest mètode torna cert immediatament.

Quan el bloqueig no està disponible i el bloqueig és cert, la fibra actual es queda en repòs. Quan altres fibres alliberen el bloqueig, aquest mètode torna a ser cert.

Quan el bloqueig no està disponible i el bloqueig és fals, el mètode torna fals.


release

Allibera la propietat del bloqueig

1
Semaphore.release();

Aquest mètode alliberarà la propietat del pany. Si la fibra actual no és propietària del pany, aquest mètode generarà un error.


count

Consulteu el nombre de tasques en espera actuals

1
Integer Semaphore.count();

Resultat de retorn:

  • Integer, Retorna el nombre de tasques

toString

Retorna la representació de cadena de l'objecte, generalment retorna "[Objecte natiu]", l'objecte es pot tornar a implementar 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 una col·lecció d'atributs llegibles definits per l'objecte

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

Paràmetres de trucada:

  • key: Cadena, sense utilitzar

Resultat de retorn:

  • Value, Retorna un valor que conté JSON serialitzable