Pakket | flash.concurrent |
Klasse | public final class Mutex |
Overerving | Mutex Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
shareable
true
is). Een Mutex kan echter ook worden gebruikt om de toegang van workers tot een deelbare bron, zoals een native AIR-extensie of een bestandssysteembestand, te beheren. Ongeacht welke bron het is, het doel van de mutex is om ervoor te zorgen dat er slechts één codeset tegelijk toegang heeft tot de bron.
Een mutex beheert de toegang met behulp van het concept van broneigendom. Op elk moment is één mutex de "eigendom" van maximaal één worker. Wanneer de eigendom van een mutex wisselt van de ene worker naar de andere, is de overgang atomisch. Dit garandeert dat het nooit mogelijk zal zijn dat meer dan één worker de eigendom over de mutex kan hebben. Zolang code in een worker alleen werkt op een gedeelde bron wanneer die worker eigenaar is van de mutex, kunt u er zeker van zijn dat er nooit een conflict met meerdere workers zal zijn.
Gebruik de methode tryLock()
om de eigendom van de mutex over te nemen als deze beschikbaar is. Gebruik de methode lock()
om de uitvoering van de huidige worker te pauzeren totdat de mutex beschikbaar is en neem vervolgens de eigendom van de mutex over. Zodra de huidige worker de eigendom over de mutex heeft, kan deze veilig werken op de gedeelde bron. Als deze bewerkingen voltooid zijn, roept u de methode unlock()
aan om de mutex vrij te geven. Op dit moment mag de huidige worker niet langer toegang hebben tot de gedeelde bron.
De Mutex-klasse is een van de speciale objecttypen die worden gedeeld tussen workers, en niet zomaar worden gekopieerd tussen workers. Als u een mutex doorgeeft van de ene worker naar de andere door ofwel de methode setSharedProperty()
van het Worker-object aan te roepen of door een MessageChannel-object te gebruiken, hebben beide workers een verwijzing naar hetzelfde Mutex-object in het geheugen van de runtime.
Verwante API-elementen
Methode | Gedefinieerd door | ||
---|---|---|---|
Mutex()
Maakt een nieuwe Mutex-instantie. | Mutex | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Pauzeert de uitvoering van de huidige worker totdat de mutex beschikbaar is en neemt vervolgens de eigendom van de mutex over. | Mutex | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Verwerft eigendom van de mutex als deze beschikbaar is. | Mutex | ||
Geeft de eigendom van de mutex vrij, zodat een andere worker de eigendom kan verwerven en werk kan uitvoeren op de gekoppelde bron. | Mutex | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
Mutex | () | Constructor |
public function Mutex()
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Maakt een nieuwe Mutex-instantie.
Gegenereerde uitzondering
Error — als de mutex niet kon worden geïnitialiseerd.
|
lock | () | methode |
public function lock():void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Pauzeert de uitvoering van de huidige worker totdat de mutex beschikbaar is en neemt vervolgens de eigendom van de mutex over. Als een andere worker de eigendom van de mutex heeft wanneer lock()
wordt aangeroepen, wordt de uitvoeringsthread van de huidige worker gepauzeerd bij het aanroepen van lock()
en wordt de worker toegevoegd aan de wachtrij voor eigendomsverzoeken. Zodra de aanroepende worker de mutex verwerft, gaat de uitvoering van de worker door met de coderegel die volgt op de call()
-aanroep.
Zodra de huidige worker de eigendom over de mutex heeft, kan deze veilig werken op de gedeelde bron. Als deze bewerkingen voltooid zijn, roept u de methode unlock()
aan om de mutex vrij te geven. Op dit moment mag de huidige worker niet langer toegang hebben tot de gedeelde bron.
Intern houdt een mutex het aantal vergrendelingsverzoeken bij dat deze ontvangt. De mutex moet hetzelfde aantal ontgrendelingsverzoeken ontvangen voordat deze kan worden vrijgegeven. Als code in de worker die eigenaar is van de mutex, deze opnieuw vergrendelt (door de methode lock()
aan te roepen) wordt het interne aantal vergrendelingen vermeerderd met één. U moet de methode unlock()
zo vaak aanroepen als er vergrendelingsverzoeken zijn om de eigendom van de mutex vrij te geven.
Als er meerdere workers wachten op een mutex, geeft de mutex bij het toewijzen van de eigendom voorrang aan de langst wachtende worker. De planning van workerthreads wordt echter beheerd door het hostbesturingssysteem, zodat een bepaalde volgorde voor de uitvoering van code tussen de workers niet kan worden gegarandeerd.
tryLock | () | methode |
public function tryLock():Boolean
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Verwerft eigendom van de mutex als deze beschikbaar is. Als een andere worker al eigenaar is van de mutex of als een andere worker de methode lock()
heeft aangeroepen en wacht om de mutex te verwerven, is de mutex niet beschikbaar. In dit geval wordt false
geretourneerd bij het aanroepen van deze methode en gaat de uitvoering van de code onmiddellijk door.
Zodra de huidige worker de eigendom over de mutex heeft, kan deze veilig werken op de gedeelde bron. Als deze bewerkingen voltooid zijn, roept u de methode unlock()
aan om de mutex vrij te geven. Op dit moment mag de huidige worker niet langer toegang hebben tot de gedeelde bron.
Als er meerdere workers wachten op een mutex, geeft de mutex bij het toewijzen van de eigendom voorrang aan de langst wachtende worker. De planning van workerthreads wordt echter beheerd door het hostbesturingssysteem, zodat een bepaalde volgorde voor de uitvoering van code tussen de workers niet kan worden gegarandeerd.
Geretourneerde waardeBoolean — true als de mutex beschikbaar was (en nu de eigendom is van de huidige worker) of false als de huidige worker de eigendom van de mutex niet heeft verworven.
|
unlock | () | methode |
public function unlock():void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Geeft de eigendom van de mutex vrij, zodat een andere worker de eigendom kan verwerven en werk kan uitvoeren op de gekoppelde bron.
Intern houdt een mutex het aantal vergrendelingsverzoeken bij dat deze ontvangt. Code in een worker moet de methode unlock()
zo vaak aanroepen als er vergrendelingsverzoeken zijn om de eigendom van de mutex vrij te geven.
Gegenereerde uitzondering
IllegalOperationError — als de huidige worker niet de eigendom heeft van de mutex.
|
Wed Jun 13 2018, 11:42 AM Z