2011-02-13 22 views
3

我有一个争用条件的一些证据[注:参见下文更新]在其中某些对象方法调用一个ActionScript 3(AS3)程序:的ActionScript 3(AS3)并发模型

  1. 当处理异步下载事件
  2. 从添加到机架上的影片剪辑的时间轴

什么是AS3的并发模型脚本?事件处理是否已序列化(即,每个处理程序是否在一个事件之后继续运行,尽管存在任何潜在的多线程)?并且是与该事件流序列化的帧中的脚本?我怀疑最后一个问题的答案是否定的。

我正在采取措施系统地记录是否/何时发生竞态条件,但很好知道AS3提供了什么保证(如果有的话)。

更新:我的确在我的事件处理程序进行简单的检查记录是否已经被感兴趣的特定对象上处理的事件处理程序,我发现,确实发生,即竞争条件是可能的。有没有其他人遇到过这个问题,你对此做了什么?

回答

0

There is no "real" concurrency in Flash - 包括事件处理在内的所有事情都由主时间轴计时。您的所有操作都必须按代码中指定的确切顺序执行。

但是,当然,如果基于一个“异步启动”的结果(我将使用这个术语,尽管严格意义上它不完全正确)的结果可能会出现问题另一个 - 当使用事件处理程序时可能是这种情况。你必须找到一些方法来自己编程解决这些问题;没有像synchronized或atomic等内置结构,没有线程和锁定,或者ActionScript中的任何其他此类机制。

有几种方法可以模拟Flash中的多线程,并且this tutorial可能是一种开始搜索解决方案的有趣方式,因为它解释了一些基本概念。

+1

实际上现在有 – 2012-10-13 02:32:56

0

只有一个线程,你的AS3代码可以运行英寸

竞争条件可能在处理异步事件,但不是在同一意义上的多线程应用程序,并且通常更易于追查。

例如,您可以开始播放动画并同时加载文件。首先完成哪一个完全取决于系统。

另一个并非真正的竞争条件但具有相似症状的示例是使用for..in(或for..each)循环为同一事件添加多个侦听器的位置。听众将按照添加的顺序接收事件,但for..in循环是随机的,所以您会看到随机结果。