Paket | flash.concurrent |
Klasse | public final class Mutex |
Vererbung | Mutex Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
shareable
-Eigenschaft den Wert true
hat). Ein Mutex kann jedoch auch verwendet werden, um den Workerzugriff auf beliebige gemeinsam nutzbare Ressourcen, zum Beispiel eine native Erweiterung in AIR oder eine Dateisystemdatei, zu verwalten. Unabhängig davon, um welche Ressource es sich handelt, hat der Mutex den Zweck, sicherzustellen, dass jeweils nur ein Codesatz auf die Ressource zugreift.
Ein Mutex verwaltet den Zugriff mithilfe des Konzepts der Ressourceneigentümerschaft. Zu jeder Zeit „gehört“ ein einzelner Mutex höchstens einem Worker. Wenn die Eigentümerschaft für einen Mutex von einem Worker zu einem anderen wechselt, ist der Übergang atomisch. Auf diese Weise wird sichergestellt, dass niemals mehr als ein Worker die Eigentümerschaft für den Mutex hat. Solange Code in einem Worker nur dann Operationen für eine gemeinsam genutzte Ressource ausführt, wenn dieser Worker die Eigentümerschaft für den Mutex hat, können Sie sicher sein, dass es niemals Konflikte zwischen mehreren Workern gibt.
Verwenden Sie die tryLock()
-Methode, um die Eigentümerschaft für den Mutex zu übernehmen, wenn verfügbar. Verwenden Sie die lock()
-Methode, um die Ausführung des aktuellen Workers anzuhalten, bis der Mutex verfügbar ist, und dann die Eigentümerschaft für den Mutex zu übernehmen. Wenn der aktuelle Worker die Eigentümerschaft für den Mutex hat, kann er die Operationen für die gemeinsam genutzte Ressource sicher ausführen. Wenn diese Operationen abgeschlossen sind, rufen Sie die unlock()
-Methode auf, um den Mutex freizugeben. An diesem Punkt sollte der aktuelle Worker nicht mehr auf die gemeinsam genutzte Ressource zugreifen.
Die Mutex-Klasse ist eine der besonderen Objekttypen, die von Workern gemeinsam benutzt werden, anstatt dass sie zwischen ihnen kopiert werden. Wenn Sie einen Mutex von einem Worker an einen anderen übergeben, indem Sie entweder die setSharedProperty()
-Methode des Worker-Objekts aufrufen oder ein MessageChannel-Objekt verwenden, verweisen beide Worker auf dasselbe Mutex-Objekt im Arbeitsspeicher der Laufzeitumgebung.
Verwandte API-Elemente
Methode | Definiert von | ||
---|---|---|---|
Mutex()
Erstellt eine neue Mutex-Instanz. | Mutex | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Hält die Ausführung des aktuellen Workers an, bis dieser Mutex verfügbar ist, und übernimmt dann die Eigentümerschaft für den Mutex. | Mutex | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Übernimmt die Eigentümerschaft für den Mutex, wenn er verfügbar ist. | Mutex | ||
Gibt die Eigentümerschaft dieses Mutex frei, sodass sie von einem beliebigen Worker übernommen werden kann und Vorgänge an der zugeordneten Ressource ausführen kann. | Mutex | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
Mutex | () | Konstruktor |
public function Mutex()
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Erstellt eine neue Mutex-Instanz.
Auslöser
Error — wenn der Mutex nicht initialisiert werden konnte.
|
lock | () | Methode |
public function lock():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Hält die Ausführung des aktuellen Workers an, bis dieser Mutex verfügbar ist, und übernimmt dann die Eigentümerschaft für den Mutex. Wenn beim Aufruf von lock()
ein anderer Worker Eigentümer des Mutex ist, hält der Ausführungsthread des aufrufenden Workers beim lock()
-Aufruf an und der Worker wird der Warteschlange der Eigentümerschaftsanforderungen hinzugefügt. Nachdem der aufrufende Worker Eigentümer des Mutex geworden ist, wird die Ausführung des Workers mit der Codezeile fortgesetzt, die nach dem lock()
-Aufruf folgt.
Wenn der aktuelle Worker die Eigentümerschaft für den Mutex hat, kann er die Operationen für die gemeinsam genutzte Ressource sicher ausführen. Wenn diese Operationen abgeschlossen sind, rufen Sie die unlock()
-Methode auf, um den Mutex freizugeben. An diesem Punkt sollte der aktuelle Worker nicht mehr auf die gemeinsam genutzte Ressource zugreifen.
Intern zählt der Mutex die Sperranforderungen, die er erhält. Der Mutex muss dieselbe Anzahl Anforderungen zum Entsperren erhalten, bevor er vollständig freigegeben wird. Wenn Code im Worker, der Eigentümer des Mutex ist, diesen erneut sperrt (durch Aufrufen der lock()
-Methode), erhöht sich der interne Zähler um eins. Sie müssen die unlock()
-Methode so viele Male aufrufen, wie Sperranforderungen zur Freigabe des Mutex empfangen wurden.
Wenn mehrere Worker auf einen Mutex warten, gibt der Mutex demjenigen Worker Vorrang beim Zuweisen der Eigentümerschaft, der am längsten wartet. Das Planen von Workerthreads wird jedoch vom Host-Betriebssystem verwaltet, sodass es keine Garantie gibt, dass ein bestimmter Code aus den Workern ausgeführt wird.
tryLock | () | Methode |
public function tryLock():Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Übernimmt die Eigentümerschaft für den Mutex, wenn er verfügbar ist. Wenn bereits ein anderer Worker Eigentümer des Mutex ist oder ein anderer Worker die lock()
-Methode aufgerufen hat und darauf wartet, die Eigentümerschaft für den Mutex zu übernehmen, ist der Mutex nicht verfügbar. In diesem Fall gibt der Aufruf dieser Methode false
zurück und die Codeausführung wird sofort fortgesetzt.
Wenn der aktuelle Worker die Eigentümerschaft für den Mutex hat, kann er die Operationen für die gemeinsam genutzte Ressource sicher ausführen. Wenn diese Operationen abgeschlossen sind, rufen Sie die unlock()
-Methode auf, um den Mutex freizugeben. An diesem Punkt sollte der aktuelle Worker nicht mehr auf die gemeinsam genutzte Ressource zugreifen.
Wenn mehrere Worker auf einen Mutex warten, gibt der Mutex demjenigen Worker Vorrang beim Zuweisen der Eigentümerschaft, der am längsten wartet. Das Planen von Workerthreads wird jedoch vom Host-Betriebssystem verwaltet, sodass es keine Garantie gibt, dass ein bestimmter Code aus den Workern ausgeführt wird.
RückgabewerteBoolean — true , wenn der Mutex verfügbar war (und jetzt Eigentum des aktuellen Workers ist), oder false , wenn der aktuelle Worker nicht die Eigentümerschaft des Mutex übernommen hat.
|
unlock | () | Methode |
public function unlock():void
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | Flash Player 11.5, AIR 3.5 |
Gibt die Eigentümerschaft dieses Mutex frei, sodass sie von einem beliebigen Worker übernommen werden kann und Vorgänge an der zugeordneten Ressource ausführen kann.
Intern zählt der Mutex die Sperranforderungen, die er erhält. Code in einem Worker muss die unlock()
-Methode so viele Male aufrufen, wie Sperranforderungen eingegangen sind, um die Eigentümerschaft des Mutex freizugeben.
Auslöser
IllegalOperationError — wenn der aktuelle Worker nicht Eigentümer des Mutex ist.
|
Tue Jun 12 2018, 10:04 AM Z