Object-ingebouwd object

Objectvergrendeling

Slot is een ingebouwd object dat kan worden gebruikt om gelijktijdige toegang tot vezels te controleren. U kunt een slot verkrijgen via één vezel om te voorkomen dat andere vezels dit tegelijkertijd verkrijgen. Slot kan passerencoroutine.Lock() functiecreatie

Een veel voorkomende situatie is dat in een scenario met meerdere threads, wanneer meerdere threads dezelfde gegevens willen wijzigen, gegevensinconsistentie zal optreden. Als twee threads bijvoorbeeld dezelfde waarde in dezelfde gegevens willen wijzigen, kunnen de resultaten inconsistent zijn als het besturingselement onjuist is. Op dit moment kan het gebruik van het Lock-object wederzijds exclusieve toegang tot dezelfde gegevens bewerkstelligen.

Het volgende is een eenvoudig voorbeeld, waarbij Lock wordt gebruikt om alternatieve uitvoering van twee vezels te implementeren, en de waarde van de gedeelde variabele v is niet 300.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
var coroutine = require("coroutine") var l = new coroutine.Lock() var v = 100 function f() { l.acquire() v = 200 coroutine.sleep(1) v = 300 l.release() } coroutine.start(f) coroutine.sleep(1) l.acquire() assert.notEqual(300, v) assert.equal(200, v) l.release()

Eerst wordt een Lock-object gemaakt, komt de vezel f binnen, verkrijgt de lock, wijzigt de variabele v en geeft vervolgens de lock vrij. Wacht in de hoofdthread tot de fiber f voltooid is... Wanneer de fiber f de Lock vrijgeeft, begint de hoofdthread de Lock te verwerven en ervoor te zorgen dat de waarde van de variabele v wordt gewijzigd in 300.

erfenis relatie

%0 object object toString() toJSON() Lock Lock new Lock() acquire() release() count() object->Lock Condition Condition Lock->Condition Event Event Lock->Event Semaphore Semaphore Lock->Semaphore

Constructeur

Lock

Constructeur

1
new Lock();

lid functie

acquire

Word eigenaar van het slot

1
Boolean Lock.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
Lock.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 Lock.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 Lock.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 Lock.toJSON(String key = "");

Oproepparameters:

  • key: Tekenreeks, niet gebruikt

Resultaten retourneren:

  • Value, retourneert een waarde die JSON-serialiseerbaar bevat