打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[精华]Lua库函数在多线程环境中发生错误解决方法

Lua库函数在多线程环境中发生错误解决方法

标签: 多线程 
2012-05-07 22:52 阅读(29)评论(0)
Lua库函数在多线程环境中发生错误解决方法
这几天想要通过Lua来定制角色的行为,但是几次均失败了。说是失败,其实就是程序在运行时,有时候会出错,有时候则不会出错,而且每次出错的地方都不一样。这可难倒了我。究竟是怎么一回事呢?我想自己的游戏使用了多线程。其实游戏中使用多线程是一件非常纠结的事情,因为如果使用了多线程,那么意味着你就必须控制好同步、互斥的问题。而如果不使用多线程则不能好好地利用系统资源。最终我还是使用了多线程技术。当多线程遇上了Lua库,就出毛病了。Lua库有时工作得挺好,有时就会“罢工”,这真是气死我了。我调试了半天也没有什么结果出来,不过最后还是通过自己的实验解决了问题!
首先我想是不是多次调用Lua函数导致虚拟栈溢出了呢?我发现自己调用
lua_getglobal()
lua_pushnumber()
lua_pushnumber()
lua_pcall()
x = luaL_checknumber()
y = luaL_checknumber()
lua_pop(L, 2)
这些函数,理论上应该不会出现栈溢出的现象(push两个,pop2个)http://www.pudncom.com/ 。随后由于自己对多线程的敏感性,我发现了原因。拿出来自己以前的实验代码做了对比,发现单线程的不管调用多少次都没有问题,而多线程的调用了几次就会崩溃,这让我想到是不是同步、ipad games互斥、共享的问题没有处理好?我发现自己的lua_State m_L是在两个线程中共享的,于是我稍微编写代码,写成了两个m_L,避免了变量共享的问题,好啦,这些毛病不复现了。解决了一个问题,仿佛是释放了一个包袱,同时也宣誓我的这个技术方案是可行的,能不高兴嘛。
以后要记住了!Lua库函数中的lua_State对象不能在多线程环境中共享!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
vlc编译过程总结
《Lua程序设计》 之 汇总
C++ 对象生命周期管理
... fatal error LINK1120:1个无法解析的外部命令 的解决办法
lua和其他语言
Lua函数(转)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服