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

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个)。随后由于自己对多线程的敏感性,我发现了原因。拿出来自己以前的实验代码做了对比,发现单线程的不管调用多少次都没有问题,而多线程的调用了几次就会崩溃,这让我想到是不是同步、互斥、共享的问题没有处理好?我发现自己的lua_State m_L是在两个线程中共享的,于是我稍微编写代码,写成了两个m_L,避免了变量共享的问题,好啦,这些毛病不复现了。解决了一个问题,仿佛是释放了一个包袱,同时也宣誓我的这个技术方案是可行的,能不高兴嘛。
以后要记住了!Lua库函数中的lua_State对象不能在多线程环境中共享!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值