我有一些关于竞争条件的证据:参见下面某个对象调用了某个对象的Actionscript 3 (as3)程序中的更新:
AS3中的并发模型是什么?事件处理是否序列化(即,尽管存在任何底层多线程,每个处理程序都会对一个又一个事件运行到完成)?框架中的脚本是否与该事件流串行化?我怀疑最后一个问题的答案是否定的。
我正在采取步骤系统地记录是否/何时发生竞争条件,但是最好知道AS3提供了什么保证(如果有的话)。
更新:我在事件处理程序中做了一个简单的检查,以记录事件处理程序是否已经在特定感兴趣的对象上被处理,我发现这确实发生了,即竞争条件是可能的。有没有其他人遇到过这种情况,你对此做了什么?!
发布于 2011-02-13 11:55:02
在Flash中没有真正的并发性。 -所有的事情,包括事件的处理,都是由主时间线计时的。您的所有操作都肯定会按照代码中指定的确切顺序执行。
但是当然,如果将一个“异步启动”的结果(我将使用这个术语,尽管严格意义上它并不完全正确)的结果基于另一个操作的结果--这是使用事件处理程序时的情况,那么可能会出现问题。您必须自己找到一些方法来自己编程解决这些问题;在ActionScript中没有任何内置的结构,比如同步或原子结构,没有线程和锁定,或者任何其他类似的机制。
有一些方法可以模拟Flash中的多线程,本教程可能是开始搜索解决方案的有趣方法,因为它解释了一些基本概念。
发布于 2011-04-14 14:16:12
只有一个线程可以运行您的AS3代码。
在异步事件的处理程序中,竞争条件是可能的,但与多线程应用程序中的情况不同,而且通常更容易跟踪。
例如,您可以启动动画播放并同时加载文件。首先完成的是完全依赖于系统的。
另一个例子不是真正的争用条件,而是一个类似的症状,您可以在其中使用for..in (或for..each)循环为同一个事件添加多个侦听器。侦听器将按照添加的顺序接收事件,但for..in循环是随机的,因此您将看到随机结果。
https://stackoverflow.com/questions/4983353
复制相似问题