Lua中的抢占式多线程

我正在使用 Lua 作为处理应用程序事件的脚本语言,我不想限制用户编写短的处理程序 - 例如,有人可能想要运行一个无限循环的处理程序,另一个处理程序会中断第一个处理程序。显然,Lua 不直接支持这种行为,因此我正在寻找解决方法。

首先,我想避免修改引擎。是否可以设置调试钩子,在状态达到其配额时产生 yield?根据文档,这应该非常容易,但我不知道是否有任何注意事项。

其次,我是否可以像实际的多线程一样使用 lua_close 终止线程?

点赞
用户2633831
用户2633831

我以前做过类似的事情。在单独的 Lua 状态上进行多线程是完全可能的。请务必查看 luaL_lock() 和 luaL_unlock()(以及相关的设置/清理),因为您无疑需要这个设置(一个简单的互斥锁应该足够)。

之后,创建一个锁定/等待/中断 API 供您的处理程序使用应该是一个相当简单的问题。

2013-10-03 11:57:27