Lua协同机制详解
Lua协同机制详解
写点简单的控制线程挂起的操作,coroutine.yield()这个函数的使用,从协同的观点看:使用函数yield可以使程序挂起,当我们激活被挂起的程序时,将从函数yield的位置继续执行程序,直到再次遇到yield或程序结束。首先我们先看一段代码,如下:
co = coroutine.create(function ()
for i=1,10 do
print("co",i)
coroutine.yield()
end
end)
coroutine.resume(co)
print(coroutine.status(co))
这段代码比较简单,高手就不用来这里,呵呵,偶也是一个初学者,大家新手入门的话可以关注本博客,随时查看一下这些内容,coroutine.yield()其中这句话负责将正在运行的东西挂起,我们打印出它的状态可以看到如下结果,如图:
然后我们再继续添加一些代码,代码如下:
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
print(coroutine.resume(co))
我们把已经结束的线程再继续的时候就出现以下情况,上面的代码只是为了展示给大家会出现什么结果,结果如下图:
我们可以看到最后打印出一个 :cannot resume dead coroutine(不能继续运行一个已经死亡的线程)。
注意:resume运行在保护模式下,因此,如果协同程序内部存在错误,Lua并不会抛出错误,而是将错误返回给resume函数。
|
评论暂时关闭