Actionscript 3(as3)并发模型

时间:2011-02-13 09:09:08

标签: actionscript-3 concurrency race-condition

我在Actionscript 3(as3)程序中有一些竞争条件的证据[注意:请参阅下面的更新],其中某个对象调用了方法:

  1. 处理异步下载事件时
  2. 从添加到动画片段时间轴上的帧中的脚本
  3. AS3中的并发模型是什么?事件处理是否已序列化(即,每个处理程序在另一个事件之后运行完成,尽管存在任何潜在的多线程)?并且是使用该事件流序列化的帧中的脚本吗?我怀疑最后一个问题的答案是否定的。

    我正在采取措施系统地记录是否/何时出现竞争条件,但最好知道AS3提供的保证(如果有的话)。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您的AS3代码只能运行一个线程。

在异步事件的处理程序中可以使用竞争条件,但与多线程应用程序的处理方式不同,并且通常更容易跟踪。

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

另一个例子,它不是真正的竞争条件,但有类似的症状,是你使用for..in(或for..each)循环为同一事件添加多个侦听器的地方。听众将按照添加的顺序接收事件,但for..in循环是随机的,因此您将看到随机结果。