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对象不能在多线程环境中共享!
分享到:
相关推荐
lua库函数
LUA-string 库函数是 Lua 语言中的一个基本库,提供了多种字符串操作函数,帮助开发者更方便地处理字符串。 string.len 函数 string.len 函数返回字符串 s 的长度。该函数可以用于获取字符串的长度,例如: ```...
Lua开发
Humble是c++、lua语言开发的多线程服务器框架,网络底层使用libevent。 目前支持MQTT、WebSocket、Http等协议。使用简单方便。 下载的txt文件里面为该项目连接。
其中配置包括了cocos2dx 2.0.4和cocos2dx2.1.3在lua中所有函数,类,类的成员变量和方法以及相关枚举定义 使用方法: 1.打开本目录下LuaKeywords.config,将里面内容复制到LuaStudio的自定义函数配置中 2.拷贝cocos...
lua脚本语言的函数库。便于程序员查询。方便大家。
一些lua脚本语言常用的库函数!主要是一些table库,math库,io库及一些文件操作。请继续关注我会整理一下string库的出来的!
Linux下lua安装环境与错误解决参考手册,此手册用于解决在Linux环境下lua环境安装问题:例如安装步骤、常见问题的解决以及使用什么命令安装lua
effil:对Lua的多线程支持
Lua的table库函数insert、remove、concat、sort详细介绍1
Lua 5.1.4。 含lua.exe、lua51.dll、luac.exe等。 有了它,你就可以愉快地在windows下玩lua啦
共用Lua全局变量、在引擎中引用脚本函数和在Lua中引用引擎函数的功能,以 达到数据共享的作用,从而建立了把Lua系统引入游戏引擎的模式。文章最后模 拟了一个仿真的游戏环境,分析了引擎与Lua脚本在游戏中各个模块的...
lua动态链接库的编译 c++调用lua的的方法 linux中调用lua的环境配置
Lua VM在WASM环境中运行
本资源实现了将Lua的任意代码片段放在主线程执行,为在Lua中更新UI提供了统一的方法
编译时设置好lua库(使用的5.1的版本),改变测试脚本到正确的路径
新版本 Lua 5.4.2 for Windows 已编译好的文件 解压+配置环境变量即可用 网上已编译的Lua文件过老 ...2. 在环境变量-系统变量-Path里 添加lua安装位置的路径 3. 打开cmd 输入lua -v 看是否显示Lua 5.4.2能否被正确找到
分享一个Lua语言的中文pdf文档,有书签的,里面还有lua的运行环境,希望更多的人可以来学习Lua这一优美小巧的语言。 安装方法:安装LuaForWindows即可,不停点下一步,安装完后,桌面上会出现Lua图标和SciTE编辑器...
只要把LuaForWindows_v5.1.4-46.zip解压安装就可以了。 Lua的运行环境就算是部署完成了,相当简单吧!
Lua经典教程,附Lua环境 lua for windows