Object-ingebouwd object

ObjectSemafoor

vezel semafoor object

Het semafoorobject beheert een interne teller, die met één wordt verlaagd na het aanroepen van verwerven of wachten, en met één wordt verhoogd na het aanroepen van vrijgeven of posten. De teller zal niet afnemen naar een negatief getal, omdat wanneer verwerven en wachten constateren dat de waarde 0 is, ze de huidige vezel zullen laten slapen totdat andere vezels de tellerwaarde verhogen door vrijgave of post.

Veelgebruikte gelegenheden voor semaforen zijn het beperken van het gelijktijdige gebruik van hulpbronnen en de toepassing van het producent/consumentmodel.

Neem databaseverzoeken als voorbeeld om het gelijktijdige gebruik van bronnen te beperken:

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();

Het producent/consument-patroon maakt meestal gebruik van semaforen met wachtrijen. De producent voegt gegevens toe aan de wachtrij en plaatst een signaal. De consument wacht eerst op het signaal, ontvangt het signaal en gaat vervolgens naar de wachtrij om de gegevens op te vragen.

erfenis relatie

Constructeur

Semaphore

semafoor-constructor

1
new Semaphore(Integer value = 1);

Oproepparameters:

  • value: Geheel getal, initiële waarde van de teller

lid functie

wait

wacht op een semafoor

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

Oproepparameters:

  • timeout: geheel getal, specificeert de time-out in milliseconden. De standaardwaarde is -1, wat betekent dat er nooit een time-out zal optreden.

Resultaten retourneren:

  • Boolean, retourneert true als de acquisitie succesvol is en retourneert false als er een time-out optreedt.

post

Geef een semafoor vrij, gelijk aan release()

1
Semaphore.post();

trywait

Probeer een signaal te verkrijgen. Als het niet kan worden verkregen, keert het onmiddellijk terug en retourneert false, wat gelijk staat aan acquire(false)

1
Boolean Semaphore.trywait();

Resultaten retourneren:

  • Boolean, retourneert true als de acquisitie succesvol is en retourneert false als er een time-out optreedt.

acquire

Word eigenaar van het slot

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

Oproepparameters:

  • blocking: Booleaanse waarde, specificeert of er moet worden gewacht, gewacht wanneer waar, standaard is waar

Resultaten retourneren:

  • Boolean, geeft terug of het slot met succes is verworven, waar geeft een succesvolle acquisitie aan.

Om het eigendom van het slot te verkrijgen wordt gebruik gemaakt van de acquire-methode. Wanneer het slot zich in de verkrijgbare staat bevindt, retourneert deze methode onmiddellijk true.

Wanneer het slot niet kan worden verkregen en de blokkering waar is, gaat de huidige vezel in de slaapstand. Wanneer andere vezels het slot vrijgeven, retourneert deze methode waar.

Wanneer de vergrendeling niet kan worden verkregen en de blokkering onwaar is, retourneert de methode onwaar.


release

Geef het eigendom van het slot vrij

1
Semaphore.release();

Met deze methode wordt het eigendom van het slot vrijgegeven of wordt er een fout gegenereerd als de huidige glasvezel geen eigenaar van het slot is.


count

Vraag het huidige aantal wachtende taken op

1
Integer Semaphore.count();

Resultaten retourneren:

  • Integer, retourneert het aantal taken

toString

Retourneert de tekenreeksweergave van het object. Over het algemeen wordt '[Native Object]' geretourneerd. Het object kan opnieuw worden geïmplementeerd op basis van zijn eigen kenmerken.

1
String Semaphore.toString();

Resultaten retourneren:

  • String, retourneert de tekenreeksrepresentatie van het object

toJSON

Retourneert een weergave in JSON-indeling van het object, waarbij doorgaans een verzameling leesbare eigenschappen wordt geretourneerd die door het object zijn gedefinieerd.

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

Oproepparameters:

  • key: Tekenreeks, niet gebruikt

Resultaten retourneren:

  • Value, retourneert een waarde die JSON-serialiseerbaar bevat