包 | 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 时,这种转换是原子性的。这就保证了任何时候都不会出现一个以上 worker 接管 mutex 所有权的情况。只有 worker 中的代码只对一个共享资源操作,则该 worker 拥有 mutex 时,您才可以确信不会出现多个 worker 发生冲突的情况。
使用 tryLock()
方法可以接管 mutex(如果有)的所有权。使用 lock()
方法可以暂停当前 worker 的执行,直到 mutex 可用,便可以接管 mutex 的所有权。一旦当前 worker 拥有 mutex 所有权后,便可以对共享资源进行安全操作了。完成这些操作后,调用 unlock()
方法可以释放 mutex。此时,当前 worker 应不再访问共享资源。
Mutex 类是一种特殊的对象类型,它是在 worker 之间共享的,而不是在 worker 之间复制的。当您通过调用 Worker 对象的 setSharedProperty()
方法或通过使用 MessageChannel 对象而将 mutex 从一个 worker 传递给另一个 worker 时,这两个 worker 引用的是运行时内存中的同一个 Mutex 对象。
相关 API 元素
方法 | 由以下参数定义 | ||
---|---|---|---|
Mutex()
创建一个新的 Mutex 实例。 | Mutex | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
暂停当前 worker 的执行,直到此 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 可用后接管其所有权。如果另一个 worker 在调用 lock()
时拥有 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, 11:04 AM Z