Pakiet | flash.concurrent |
Klasa | public final class Mutex |
Dziedziczenie | Mutex Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
shareable
o wartości true
). Klasa Mutex pozwala także na zarządzanie dostępem procesów roboczych do dowolnego zasobu możliwego do współużytkowania, takiego jak natywne rozszerzenie środowiska AIR lub plik z systemu plików. W każdej z takich sytuacji za pomocą obiektów Mutex można w kodzie osiągnąć wyłączność jednoczesnego dostępu do zasobu.
Sterowanie dostępem przez klasę Mutex jest realizowane w oparciu o tak zwane prawo własności do zasobu. Przez większość czasu jeden obiekt Mutex jest „posiadany” przez najwyżej jeden proces roboczy. Przeniesienie prawa własności do obiektu Mutex do innego procesu roboczego jest czynnością atomową. Oznacza to, że nie jest możliwa sytuacja, w której jeden obiekt Mutex byłby posiadany przez więcej niż jeden proces roboczy. O ile kod procesu roboczego używa zasobów współużytkowanych wyłącznie wtedy, gdy ma obiekt Mutex, nie jest możliwe wystąpienie konfliktu między wieloma procesami roboczymi.
Przejęcie prawa własności do dostępnego obiektu Mutex jest możliwe za pomocą metody tryLock()
. Metoda lock()
pozwala na wstrzymanie wykonywania bieżącego procesu roboczego do momentu udostępnienia obiektu Mutex, a następnie przejęcie jego własności. Posiadanie przez proces roboczy prawa własności do obiektu Mutex oznacza możliwość bezpiecznej pracy z użyciem zasobu współużytkowanego. Po zakończeniu tych czynności należy wywołać metodę unlock()
i zwolnić obiekt Mutex. W momencie jego zwalniania bieżący proces roboczy nie może już używać zasobu współużytkowanego.
Klasa Mutex udostępnia 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 obiektu Mutex z procesu roboczego do innego procesu roboczego przez wywołanie metody setSharedProperty()
obiektu Worker lub użycie obiektu MessageChannel oba procesy robocze zawierają odniesienia do tego samego obiektu Mutex w pamięci środowiska wykonawczego.
Powiązane elementy interfejsu API
Metoda | Zdefiniowane przez | ||
---|---|---|---|
Mutex()
Tworzy nowe wystąpienie klasy Mutex. | Mutex | ||
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 | ||
Wstrzymuje wykonywanie bieżącego procesu roboczego do momentu udostępnienia obiektu Mutex, a następnie przejmuje jego własność. | Mutex | ||
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 | ||
Przejmuje prawo własności do obiektu Mutex, jeśli jest dostępne. | Mutex | ||
Oddaje prawo własności do obiektu Mutex, co umożliwia przejęcie go przez inny proces roboczy realizujący dalszą pracę z użyciem skojarzonego zasobu. | Mutex | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
Mutex | () | Konstruktor |
public function Mutex()
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Tworzy nowe wystąpienie klasy Mutex.
Zgłasza
Error — Jeśli zainicjowanie obiektu Mutex nie było możliwe.
|
lock | () | metoda |
public function lock():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Wstrzymuje wykonywanie bieżącego procesu roboczego do momentu udostępnienia obiektu Mutex, a następnie przejmuje jego własność. Jeśli w momencie wywoływania metody lock()
obiekt Mutex należy do innego procesu roboczego, wykonywany wątek procesu roboczego zostaje wstrzymany w miejscu wywołania metody lock()
i umieszczony w kolejce żądań przejęcia prawa własności do obiektu Mutex. Gdy proces roboczy otrzyma prawo własności do obiektu Mutex, wykonywanie procesu zostanie wznowione od wiersza kodu następującego po wierszu z wywołaniem metody lock()
.
Posiadanie przez proces roboczy prawa własności do obiektu Mutex oznacza możliwość bezpiecznej pracy z użyciem zasobu współużytkowanego. Po zakończeniu tych czynności należy wywołać metodę unlock()
i zwolnić obiekt Mutex. W momencie jego zwalniania bieżący proces roboczy nie może już używać zasobu współużytkowanego.
Obiekt Mutex ma wewnętrzny licznik wskazujący na liczbę otrzymanych żądań zablokowania. Pełne zwolnienie obiektu Mutex jest możliwe tylko wtedy, gdy liczba żądań odblokowania jest taka sama jak liczba żądań zablokowania. Jeśli proces roboczy, który ma prawo własności do obiektu Mutex, zablokuje go ponownie (wywołując metodę lock()
), wartość wewnętrznego licznika blokad zostanie zwiększona o jeden. Aby oddać prawo własności do obiektu Mutex, metodę unlock()
należy wywołać tyle samo razy, ile wystąpiło żądań zablokowania.
Gdy na obiekt Mutex oczekuje wiele procesów roboczych, prawo własności do tego obiektu jest przydzielane w pierwszej kolejności temu procesowi, który czeka najdłużej. Planowanie pracy wątków procesów roboczych jest realizowane przez system operacyjny, dlatego nie można zagwarantować określonej kolejności wykonywania kodu zapisanego w różnych procesach.
tryLock | () | metoda |
public function tryLock():Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Przejmuje prawo własności do obiektu Mutex, jeśli jest dostępne. Jeśli obiekt Mutex należy już do innego procesu roboczego albo inny proces wywołał wcześniej metodę lock()
i oczekuje już na przydzielenie obiektu Mutex, obiekt nie jest dostępny. W takiej sytuacji metoda zwraca wartość false
, a wykonywanie kodu jest natychmiast wznawiane.
Posiadanie przez proces roboczy prawa własności do obiektu Mutex oznacza możliwość bezpiecznej pracy z użyciem zasobu współużytkowanego. Po zakończeniu tych czynności należy wywołać metodę unlock()
i zwolnić obiekt Mutex. W momencie jego zwalniania bieżący proces roboczy nie może już używać zasobu współużytkowanego.
Gdy na obiekt Mutex oczekuje wiele procesów roboczych, prawo własności do tego obiektu jest przydzielane w pierwszej kolejności temu procesowi, który czeka najdłużej. Planowanie pracy wątków procesów roboczych jest realizowane przez system operacyjny, dlatego nie można zagwarantować określonej kolejności wykonywania kodu zapisanego w różnych procesach.
ZwracaBoolean — Wartość true oznacza, że obiekt Mutex był dostępny (i jest aktualnie posiadany przez bieżący proces roboczy), a wartość false — że bieżący proces roboczy nie przejął prawa własności do obiektu Mutex.
|
unlock | () | metoda |
public function unlock():void
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 11.5, AIR 3.5 |
Oddaje prawo własności do obiektu Mutex, co umożliwia przejęcie go przez inny proces roboczy realizujący dalszą pracę z użyciem skojarzonego zasobu.
Obiekt Mutex ma wewnętrzny licznik wskazujący na liczbę otrzymanych żądań zablokowania. Aby oddać prawo własności do obiektu Mutex, metodę unlock()
należy wywołać w kodzie procesu roboczego tyle samo razy, ile wystąpiło żądań zablokowania.
Zgłasza
IllegalOperationError — Gdy bieżący proces roboczy nie jest właścicielem obiektu Mutex.
|
Tue Jun 12 2018, 12:06 PM Z