首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua:避免重载pcall和Lua callstack

Lua:避免重载pcall和Lua callstack
EN

Stack Overflow用户
提问于 2012-11-28 21:21:54
回答 1查看 633关注 0票数 2

我有一个程序,它使用lua_pcall对Lua脚本执行非常快的调用。似乎如果程序调用lua脚本太快,事情就会搞砸,并在最随机的地方导致访问冲突。

我尝试了互斥,甚至用try/catch启用了SEH异常,但都无济于事。错误函数已经就位,我正在检查所有适当的返回代码;问题是pcall内部的实际访问冲突,而不是安全处理的Lua错误。

很多时候,中断发生在luaV_execute中,但有时也会出现在其他随机的地方。我已经检查以确保所有推送到堆栈的参数都是有效的。

有没有办法强制Lua在返回前完成调用,或者确保调用堆栈不会被破坏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-28 22:14:38

尽管Lua系统作为一个整体是完全可重入的,但是单个lua_State实例本身并不是线程安全的。

如果从多个线程访问lua_State,则应该使用互斥或其他锁定机制来确保一次只有一个线程可以操作该状态。并发访问很容易导致您所看到的那种损坏。

如果您正在处理多个lua_State实例,那么每个状态都可以有自己的访问锁;您不需要为整个Lua运行时设置一个全局锁。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13606066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档