在自定义队列中,有一个push()和一个pop()函数。pop()可以在Event.COMPLETE上的任何时候被调用,所以这是否意味着代码可以同时在push()和pop()中运行?如果是这样,有没有办法防止代码同时在两个函数中运行?
发布于 2010-06-08 04:37:02
不,Flash是独一无二的单线程,所以不可能同时进行两个操作。
基本上,在处理事件时,您不必担心其他代码尚未完成执行。
发布于 2010-06-08 16:26:50
你应该阅读这篇关于Order of operations的帖子(见事件和帧执行)。
虽然flash可能会给人以多线程和异步操作的印象,但它只是一个单线程程序,所以你永远不需要担心锁定。基本上,事件操作是在“帧之间”运行的,所以“在”帧上运行的代码是在事件运行之前/之后完成的,所以不会担心功能重叠。
发布于 2010-06-08 04:25:09
你需要在“上下文切换”的上下文中搜索“原子操作”的概念,以及互斥锁的概念。
基本上,互斥是一个由线程设置或清除的布尔值。
每个线程将:
function pop(){ Get_Mutex();do_the_pop_operation();Free_Mutex();}
或
函数push() { Get_Mutex();do_the_push_operation();Free_Mutex();}
Get_Mutex()函数将处于休眠状态,直到它接收到互斥锁为止,因此一次只能发生一个操作。
https://stackoverflow.com/questions/2992836
复制相似问题