在自定义队列中,有一个push()和一个pop()函数。可以在Event.COMPLETE上随时调用pop(),这是否意味着代码可以同时在push()和pop()中运行?如果是这样,有没有办法阻止代码同时在两个函数中运行?
答案 0 :(得分:1)
不,Flash是单线程的,因此不可能同时进行两次操作。
基本上,在处理事件时,您不必担心其他代码尚未完成执行。
答案 1 :(得分:1)
你应该通过senocular阅读这篇文章(具体见事件和框架执行)Order of operations。
虽然flash可能会给多线程带来一些非同步操作的印象,但它只是一个单线程程序,所以你永远不必担心锁定。基本上事件操作是在“两个”帧之间运行,因此运行“在”帧上运行的代码在事件运行之前/之后完成,因此不必担心功能重叠。答案 2 :(得分:0)
您需要在“上下文切换”的上下文中讨论“原子操作”的概念,以及互斥锁的概念。
基本上,互斥锁是一个由线程设置或清除的布尔值。
每个帖子都会:
function pop(){ Get_Mutex(); do_the_pop_operation(); Free_Mutex(); }
或
function push(){ Get_Mutex(); do_the_push_operation(); Free_Mutex(); }
Get_Mutex()函数将一直处于休眠状态,直到收到互斥锁为止,因此一次只能进行一次操作。