Pakket | flash.concurrent |
Klasse | public final class Condition |
Overerving | Condition Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
De volgende is een mogelijke workflow voor het gebruik van een Condition-object:
- Voordat een Condition-object kan worden gebruikt, moet de eerste worker de eigendom overnemen van de met de voorwaarde gekoppelde mutex door de methoden
lock()
oftryLock()
van het Mutex-object aan te roepen. - De code van de worker werkt op de gedeelde bron tot een voorwaarde false wordt, zodat de worker niet meer met de gedeelde bron kan werken. Als de gedeelde bron bijvoorbeeld een set gegevens is die moet worden verwerkt, kan de worker niet meer werken als er geen gegevens meer zijn om te worden verwerkt.
- Op dit moment roept u de methode
wait()
van het Condition-object aan om de uitvoering van de worker te pauzeren en geeft u de eigendom van de mutex vrij. - Op een bepaald punt neemt een tweede worker de eigendom van de mutex over. Omdat de mutex beschikbaar is, kan de code van de tweede worker veilig werken op de gedeelde bron. De tweede worker doet wat nodig is om aan de voorwaarde te voldoen, zodat de eerste worker zijn werk opnieuw kan uitvoeren. Als de eerste worker bijvoorbeeld geen gegevens heeft om te verwerken, zou de tweede worker meer gegevens kunnen doorgeven om te worden verwerkt in de gedeelde bron.
- Op dit moment is de voorwaarde die verbonden is met het werk van de eerste worker nu true, zodat de eerste worker een melding ontvangt dat aan de voorwaarde is voldaan. Om de eerste worker een melding te geven, roept de code van de tweede worker de methode
notify()
of de methodenotifyAll()
van het Condition-object aan. - Naast het aanroepen van
notify()
moet de tweede worker de eigendom van de mutex vrijgeven. Deze doet dit ofwel door de methodeunlock()
van het Mutex-object of de methodewait()
van het Condition-object aan te roepen. Omdat de eerste worker de methodewait()
heeft aangeroepen, keert de eigendom van de mutex terug naar de eerste worker. De uitvoering van de code in de eerste worker gaat vervolgens verder met de volgende coderegel die volgt op dewait()
-aanroep.
De Condition-klasse is een van de speciale objecttypen die daadwerkelijk worden gedeeld tussen workers, en niet gekopieerd. Wanneer u een voorwaarde doorgeeft van één worker naar een andere (door ofwel de methode setSharedProperty()
van het Worker-object aan te roepen, of door een MessageChannel-object te gebruiken), beschikken beide workers over een verwijzing naar een en hetzelfde Condition-object in het geheugen van de runtime.
Verwante API-elementen
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
isSupported : Boolean [statisch] [alleen-lezen]
Geeft aan of de Condition-klasse wordt ondersteund voor het huidige platform. | Condition | ||
mutex : Mutex [alleen-lezen]
De mutex die aan deze voorwaarde is gekoppeld. | Condition |
Methode | Gedefinieerd door | ||
---|---|---|---|
Maakt een nieuwe Condition-instantie. | Condition | ||
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 | ||
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, is voldaan en dat de eigendom van de mutex wordt geretourneerd naar de volgende worker (indien aanwezig) die op deze voorwaarde wacht. | Condition | ||
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, is voldaan en dat de eigendom van de mutex wordt geretourneerd naar alle workers die op deze voorwaarde wachten. | Condition | ||
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 | ||
Retourneert de primitieve waarde van het opgegeven object. | Object | ||
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, niet is voldaan en dat de huidige worker moet wachten tot aan de voorwaarde is voldaan voordat meer code kan worden uitgevoerd. | Condition |
isSupported | eigenschap |
isSupported:Boolean
[alleen-lezen] Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Geeft aan of de Condition-klasse wordt ondersteund voor het huidige platform.
Opmerking: als de Mutex-klasse niet wordt ondersteund, is het maken van een Condition-instantie niet mogelijk en is deze eigenschap false
.
Implementatie
public static function get isSupported():Boolean
mutex | eigenschap |
Condition | () | Constructor |
notify | () | methode |
public function notify():void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, is voldaan en dat de eigendom van de mutex wordt geretourneerd naar de volgende worker (indien aanwezig) die op deze voorwaarde wacht.
Bij het aanroepen van deze methode wordt de eigendom van de mutex niet automatisch vrijgegeven. Nadat notify()
wordt aangeroepen, moet u expliciet de eigendom van de mutex vrijgeven op een van deze twee manieren: roep de methode Mutex.unlock()
aan als de huidige worker de mutex niet opnieuw nodig heeft, of roep wait()
aan als de worker de eigendom van de mutex opnieuw moet opnemen nadat andere workers hun werk hebben voltooid.
Zodra de vergrendeling van de mutex is vrijgegeven, verwerft de volgende worker in de wachtrij met workers die de methode wait()
hebben aangeroepen, de mutex en hervat deze de uitvoering van de code.
Gegenereerde uitzondering
IllegalOperationError — als de huidige worker niet de eigenaar is van de mutex van deze voorwaarde
|
notifyAll | () | methode |
public function notifyAll():void
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, is voldaan en dat de eigendom van de mutex wordt geretourneerd naar alle workers die op deze voorwaarde wachten.
Bij het aanroepen van deze methode wordt de eigendom van de mutex niet automatisch vrijgegeven. Nadat notify()
wordt aangeroepen, moet u expliciet de eigendom van de mutex vrijgeven op een van deze twee manieren: roep de methode Mutex.unlock()
aan als de huidige worker de mutex niet opnieuw nodig heeft, of roep wait()
aan als de worker de eigendom van de mutex opnieuw moet opnemen nadat andere workers hun werk hebben voltooid.
Zodra de vergrendeling van de mutex is vrijgegeven, ontvangen de wachtende workers één voor één de eigendom in de volgorde waarin ze de methode wait()
hebben aangeroepen. Elke worker die de methode wait()
heeft aangeroepen, verwerft op zijn beurt de mutex en hervat vervolgens de uitvoering van de code. Als die worker de methode Mutex.unlock()
of de methode wait()
aanroept, wisselt de eigendom van de mutex naar de volgende wachtende worker. Telkens wanneer de eigendom van de mutex verandert tussen workers, wordt de overgang uitgevoerd als een enkele atomische bewerking.
Gegenereerde uitzondering
IllegalOperationError — als de huidige worker niet de eigenaar is van de mutex van deze voorwaarde
|
wait | () | methode |
public function wait(timeout:Number = -1):Boolean
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 11.5, AIR 3.5 |
Geeft op dat aan de voorwaarde die dit Condition-object vertegenwoordigt, niet is voldaan en dat de huidige worker moet wachten tot aan de voorwaarde is voldaan voordat meer code kan worden uitgevoerd. Als deze methode wordt aangeroepen, wordt de uitvoeringsthread van de huidige worker gepauzeerd en wordt de eigendom van de mutex van de voorwaarde vrijgegeven. Deze stappen worden uitgevoerd als een enkele atomische bewerking. De worker blijft gepauzeerd tot een andere worker de methoden notify()
of notifyAll()
van dit Condition-object aanroept.
Parameters
timeout:Number (default = -1 ) — de maximumtijd, in milliseconden, dat de uitvoering wordt gepauzeerd door de worker voordat er wordt doorgegaan. Als deze waarde -1 is (standaardwaarde), is er geen time-out en wordt de uitvoering oneindig gepauzeerd.
|
Boolean — true als de methode werd geretourneerd omdat de tijd van de time-out is verstreken. Anders wordt false geretourneerd door de methode.
|
Gegenereerde uitzondering
IllegalOperationError — als de huidige worker niet de eigenaar is van de mutex van deze voorwaarde
| |
ArgumentError — als het timeout -argument minder is dan 0 en niet gelijk aan -1
| |
ScriptTimeoutError — als de methode wordt aangeroepen door code in de 'primordial worker' in Flash Player en de worker langer pauzeert dan de time-outlimiet voor scripts (standaard ingesteld op 15 seconden)
| |
Error — als de methode wordt aangeroepen en de wachtende worker wordt beëindigd, terwijl de uitvoering van de aanroepende worker is gepauzeerd.
|
Wed Jun 13 2018, 11:42 AM Z