Pakiet | flash.concurrent |
Klasa | public final class Condition |
Dziedziczenie | Condition Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Poniżej przedstawiono jeden z możliwych ciągów instrukcji z użytym obiektem Condition:
- Przed użyciem obiektu Condition pierwszy proces roboczy musi przejąć prawo własności do powiązanego z warunkiem obiektu Mutex, wywołując metodę
lock()
lubtryLock()
obiektu Mutex. - Kod procesu roboczego jest wykonywany przy użyciu zasobu współużytkowanego tak długo, dopóki wszystkie warunki są prawdziwe. Gdy jeden z warunków przestaje być prawdziwy, dalsze używanie zasobu współużytkowanego przez proces roboczy nie jest możliwe. Jeśli na przykład w zasobie współużytkowanym będącym zbiorem danych do przetworzenia zabraknie danych, proces roboczy nie będzie mógł wykonać żadnej dalszej pracy.
- W takiej sytuacji należy wywołać metodę
wait()
obiektu Condition, co pozwoli wstrzymać wykonywanie procesu roboczego i oddać prawo własności do obiektu Mutex. - Nieco później prawo własności do obiektu Mutex zostanie przejęte przez drugi proces roboczy. Obiekt Mutex jest dostępny, dzięki czemu drugi proces roboczy może bezpiecznie rozpocząć pracę przy użyciu zasobu współużytkowanego. Drugi proces roboczy realizuje wszystkie niezbędne czynności prowadzące do spełnienia warunku, co umożliwia wznowienie pracy przez pierwszy proces. Na przykład w sytuacji, w której pierwszemu procesowi roboczemu zabrakło danych do przetworzenia, drugi proces może przesłać do zasobu współużytkowanego dalsze dane przeznaczone do przetworzenia.
- Dzięki temu warunek związany z pracą pierwszego procesu roboczego zostanie spełniony. Jednak konieczne jest przesłanie odpowiedniego powiadomienia do pierwszego procesu roboczego. Aby to zrobić, kod drugiego procesu roboczego wywołuje metodę
notify()
lubnotifyAll()
obiektu Condition. - Poza wywołaniem obiektu
notify()
drugi proces roboczy musi oddać prawo własności obiektu Mutex. Jest to realizowane za pomocą wywołania metodyunlock()
obiektu Mutex lub metodywait()
obiektu Condition. To pierwszy proces roboczy wywołał metodęwait()
, dlatego prawo własności do obiektu Mutex wraca do pierwszego procesu roboczego. Po zmianie prawa własności wykonywanie kodu jest wznawiane przez proces roboczy od wiersza za wierszem z wywołaniem metodywait()
.
Klasa Condition definiuje jeden ze specjalnych typów obiektów, które są współużytkowane przez procesy robocze, a nie kopiowane między nimi. W przypadku przekazania warunku między procesami roboczymi przez wywołanie metody setSharedProperty()
obiektu Worker lub użycie obiektu MessageChannel oba procesy robocze zawierają odniesienia do tego samego obiektu Condition w pamięci środowiska wykonawczego.
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
isSupported : Boolean [statyczny] [tylko do odczytu]
Wskazuje, czy klasa Condition jest obsługiwana przez bieżącą platformę. | Condition | ||
mutex : Mutex [tylko do odczytu]
Obiekt Mutex związany z tym warunkiem. | Condition |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Tworzy nowe wystąpienie klasy Condition. | Condition | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, że warunek zawarty w danym obiekcie Condition został spełniony i nastąpi przywrócenie prawa własności do obiektu Mutex do następnego procesu roboczego oczekującego w tym warunku (jeśli taki proces istnieje). | Condition | ||
Wskazuje, że warunek zawarty w danym obiekcie Condition został spełniony, a prawo własności do obiektu Mutex zostanie przywrócone wszystkim procesom roboczym oczekującym na spełnienie tego warunku. | Condition | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object | ||
Wskazuje, że warunek zawarty w danym obiekcie Condition nie został spełniony, przez co nie jest jeszcze możliwe wznowienie wykonywania kodu przez bieżący proces roboczy. | Condition |
isSupported | właściwość |
isSupported:Boolean
[tylko do odczytu] Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Wskazuje, czy klasa Condition jest obsługiwana przez bieżącą platformę.
Uwaga: Jeśli klasa Mutex nie jest obsługiwana, utworzenie wystąpienia obiektu Condition nie będzie możliwe, a właściwość będzie miała wartość false
.
Implementacja
public static function get isSupported():Boolean
mutex | właściwość |
Condition | () | Konstruktor |
notify | () | metoda |
public function notify():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Wskazuje, że warunek zawarty w danym obiekcie Condition został spełniony i nastąpi przywrócenie prawa własności do obiektu Mutex do następnego procesu roboczego oczekującego w tym warunku (jeśli taki proces istnieje).
Wywołanie tej metody nie powoduje automatycznego zwolnienia prawa własności do obiektu Mutex. Po wywołaniu metody notify()
należy jawnie oddać prawo własności do obiektu Mutex na jeden z dwóch sposobów — przez wywołanie metody Mutex.unlock()
, jeśli bieżący proces nie będzie potrzebować ponownie obiektu Mutex, lub metody wait()
, jeśli prawo własności do obiekt Mutex wróci do danego procesu roboczego po wykonaniu pracy przez inne procesy robocze.
Po zwolnieniu blokady obiektu Mutex obiekt ten zostanie przekazany do następnego procesu roboczego w kolejce procesów, które wywołały metodę wait()
, i zostanie wznowione wykonywanie kodu.
Zgłasza
IllegalOperationError — Jeśli bieżący proces roboczy nie ma prawa własności do obiektu Mutex danego warunku.
|
notifyAll | () | metoda |
public function notifyAll():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Wskazuje, że warunek zawarty w danym obiekcie Condition został spełniony, a prawo własności do obiektu Mutex zostanie przywrócone wszystkim procesom roboczym oczekującym na spełnienie tego warunku.
Wywołanie tej metody nie powoduje automatycznego zwolnienia prawa własności do obiektu Mutex. Po wywołaniu metody notify()
należy jawnie oddać prawo własności do obiektu Mutex na jeden z dwóch sposobów — przez wywołanie metody Mutex.unlock()
, jeśli bieżący proces nie będzie potrzebować ponownie obiektu Mutex, lub metody wait()
, jeśli prawo własności do obiekt Mutex wróci do danego procesu roboczego po wykonaniu pracy przez inne procesy robocze.
Po zwolnieniu blokady obiektu Mutex prawo własności będzie przekazywane kolejno między procesami roboczymi w kolejności wywoływania metody wait()
przez te procesy. Każdy proces roboczy, który wywołał metodę wait()
, otrzyma kolejno obiekt Mutex, co pozwoli wznowić wykonywanie kodu. Gdy proces roboczy wywoła metodę Mutex.unlock()
lub wait()
, prawo własności do obiektu Mutex zostanie przekazane do następnego oczekującego procesu roboczego. Każde przełączenie prawa własności do obiektu Mutex między procesami roboczymi jest wykonywane jako pojedyncza operacja atomowa.
Zgłasza
IllegalOperationError — Jeśli bieżący proces roboczy nie ma prawa własności do obiektu Mutex danego warunku.
|
wait | () | metoda |
public function wait(timeout:Number = -1):Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Wskazuje, że warunek zawarty w danym obiekcie Condition nie został spełniony, przez co nie jest jeszcze możliwe wznowienie wykonywania kodu przez bieżący proces roboczy. Wywołanie tej metody powoduje wstrzymanie wykonywania bieżącego wątku procesu roboczego oraz zwalnia prawo własności do obiektu Mutex warunku. Te kroki są wykonywane w jednej atomowej operacji. Proces roboczy pozostaje wstrzymany do momentu wywołania metody notify()
lub notifyAll()
obiektu Condition.
Parametry
timeout:Number (default = -1 ) — Określony w milisekundach maksymalny czas wstrzymania wykonywania pracy przez proces roboczy. Wartość domyślna –1 oznacza brak limitu czasu i ograniczenia czasowego wykonywania skryptu.
|
Boolean — Wartość true oznacza, że metoda została zwrócona z powodu upływu limitu czasu. W przeciwnym razie zostanie zwrócona wartość false .
|
Zgłasza
IllegalOperationError — Jeśli bieżący proces roboczy nie ma prawa własności do obiektu Mutex danego warunku.
| |
ArgumentError — Jeśli argument timeout ma wartość mniejszą niż 0 i inną od –1.
| |
ScriptTimeoutError — Jeśli metoda jest wywoływana z kodu w pierwotnym procesie roboczym w programie Flash Player, a działanie procesu roboczego jest wstrzymywane na czas dłuższy niż limit czasu skryptu (domyślnie 15 sekund).
| |
Error — Jeśli metoda zostanie wywołana, gdy proces roboczy jest wstrzymany, oczekujący proces roboczy zostanie zakończony.
|
Tue Jun 12 2018, 12:06 PM Z