放弃协程

9

如果一个协程在Lua 5.1中没有被正确结束,会有多糟糕的影响呢?换句话说,如果一个协程被挂起但是我从未恢复它,那么它会在程序完成之前留下很多状态吗?

cor=coroutine.wrap(somefunc)

while true do
   done=cor()
   if done then -- coroutine exited with "return true" 
       break
   else -- coroutine yielded with "coroutine.yield(false)"
       if some_condition then break end
   end
end

function somefunc()
    -- do something
    coroutine.yield(false)
    -- do some more
    return true
end 

根据上面伪代码中的某些条件,协程可能永远不会被恢复,因此可能永远无法正确“结束”。

我可以对数十个协程执行此操作而无需担心吗?将协程保留在这种状态下是否安全?这是否费时?


5
我完全不了解Lua,但如果我是你的话,我会想知道更大的问题:你如何确定是否存在内存泄漏(或者当你说“昂贵”时,你感兴趣的任何东西)?如果有工具可以使用,那么你就可以自己经验性地回答这个问题。 - Dan Rosenstark
这对于评估内存消耗元素是可行的,但我也想知道它是否安全。即它是否会创建后来未预料到的问题? - proFromDover
1个回答

19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接