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
10var 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
1new Semaphore(Integer value = 1);
Oproepparameters:
- value: Geheel getal, initiële waarde van de teller
lid functie
wait
wacht op een semafoor
1Boolean 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()
1Semaphore.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)
1Boolean 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
1Boolean 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
1Semaphore.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
1Integer 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.
1String 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.
1Value Semaphore.toJSON(String key = "");
Oproepparameters:
- key: Tekenreeks, niet gebruikt
Resultaten retourneren:
- Value, retourneert een waarde die JSON-serialiseerbaar bevat