套件 | flash.concurrent |
類別 | public final class Mutex |
繼承 | Mutex Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.5, AIR 3.5 |
shareable
屬性為 true
的 ByteArray 物件),管理不同 Worker 中的程式碼。不過,Mutex 可以用來管理 Worker 對任何可共用之資源的存取,例如 AIR 原生擴充功能或檔案系統的檔案。無論是何種資源,mutex 的用途都是為了確保一次只有一組程式碼存取資源。
mutex 使用資源所有權的概念來管理存取權。不管何時,單一 mutex 最多是一個 Worker「所擁有」。當 mutex 的所有權在 Worker 之間切換時,轉變是不可分割的。這可保證絕對不會有一個以上的 Worker 取得 mutex 的所有權。只要 Worker 中的程式碼僅在共用資源上運作,當該 Worker 擁有 mutex 時,您就可以肯定多個 Worker 中絕不會產生任何衝突。
使用 tryLock()
方法可以取得 mutex 的所有權 (如果可以使用的話)。使用 lock()
方法可以暫停目前 Worker 的執行,直到 mutex 可以使用為止,然後再取得 mutex 的所有權。一旦目前 Worker 擁有 mutex 的所有權,就可以安全地在共用資源上運作。當那些作業完成時,請呼叫 unlock()
方法以釋放 mutex。此時,目前 Worker 應該不會再存取共用資源。
Mutex 類別是 Worker 之間共用 (而非複製) 的特殊物件類型之一。當您透過呼叫 Worker 物件的 setSharedProperty()
方法或使用 MessageChannel 物件,將 mutex 從一個 Worker 傳遞到另一個 Worker 時,兩個 Worker 都會參考執行階段記憶體中相同的 Mutex 物件。
相關 API 元素
方法 | 定義自 | ||
---|---|---|---|
Mutex()
建立新的 Mutex 實體。 | Mutex | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
請暫停目前 Worker 的執行,直到這個 mutex 可以使用為止,然後再取得 mutex 的所有權。 | Mutex | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
取得 mutex 的所有權 (如果可以使用的話)。 | Mutex | ||
釋放這個 mutex 的所有權,以允許任何 Worker 取得所有權並在關聯的資源上執行工作。 | Mutex | ||
會傳回指定之物件的基本值。 | Object |
Mutex | () | 建構函式 |
public function Mutex()
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.5, AIR 3.5 |
建立新的 Mutex 實體。
擲回值
Error — 無法初始化 mutex。
|
lock | () | 方法 |
public function lock():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.5, AIR 3.5 |
請暫停目前 Worker 的執行,直到這個 mutex 可以使用為止,然後再取得 mutex 的所有權。如果呼叫 lock()
時另一個 Worker 擁有 mutex,則呼叫的 Worker 的執行緒會在呼叫 lock()
時暫停,並且 Worker 會新增到所有權要求的佇列中。一旦呼叫的 Worker 取得 mutex,Worker 的執行會從 lock()
呼叫的下一行程式碼繼續執行。
一旦目前 Worker 擁有 mutex 的所有權,就可以安全地在共用資源上運作。當那些作業完成時,請呼叫 unlock()
方法以釋放 mutex。此時,目前 Worker 應該不會再存取共用資源。
在內部,mutex 會持續計算所收到的鎖定要求數目。mutex 必須收到相同的解除鎖定要求數目,才能完全釋放。如果擁有 mutex 之 Worker 中的程式碼再次將它鎖定 (透過呼叫 lock()
方法),內部鎖定計數就會增加 1。您呼叫 unlock()
方法的次數必須與鎖定要求數目一樣多,才能釋放 mutex 的所有權。
當多個 Worker 在等候 mutex 時,mutex 會提供優先順序將所有權指派給等候時間最長的 Worker。然而,Worker 執行緒的排程是由主機作業系統所管理,因此,不保證 Worker 之間會依照特定程式碼執行順序。
tryLock | () | 方法 |
public function tryLock():Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.5, AIR 3.5 |
取得 mutex 的所有權 (如果可以使用的話)。如果另一個 Worker 已經擁有 mutex 或另一個 Worker 已經呼叫 lock()
方法並正在等候取得 mutex,則 mutex 無法使用。在此情況下,呼叫這個方法會傳回 false
,並且程式碼執行會立即繼續。
一旦目前 Worker 擁有 mutex 的所有權,就可以安全地在共用資源上運作。當那些作業完成時,請呼叫 unlock()
方法以釋放 mutex。此時,目前 Worker 應該不會再存取共用資源。
當多個 Worker 在等候 mutex 時,mutex 會提供優先順序將所有權指派給等候時間最長的 Worker。然而,Worker 執行緒的排程是由主機作業系統所管理,因此,不保證 Worker 之間會依照特定程式碼執行順序。
傳回值Boolean — 如果 mutex 可以使用 (且現在由目前 Worker 所擁有) 則為 true ,如果目前 Worker 未取得 mutex 的所有權,則為 false 。
|
unlock | () | 方法 |
public function unlock():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.5, AIR 3.5 |
釋放這個 mutex 的所有權,以允許任何 Worker 取得所有權並在關聯的資源上執行工作。
在內部,mutex 會持續計算所收到的鎖定要求數目。Worker 中程式碼呼叫 unlock()
方法的次數必須與鎖定要求數目一樣多,才能釋放 mutex 的所有權。
擲回值
IllegalOperationError — 目前 Worker 未擁有 mutex。
|
Tue Jun 12 2018, 03:47 PM Z