lua_newthread正在停止
lua_newthread is stopping
我正在使用LUA的线程,我正在使用lua_newthread在我的代码中必须执行相同的功能n次。
要使用竞争对手的线程,请在C++中实例化一些线程,并为每个线程分配一个lua_state此lua_state = lua_newthread。此线程仅在应用程序结束时销毁,因此我总是重用这些线程lua_state的属性。我的问题是这样的,运行一段时间后,应用程序中发生崩溃,这可能是由垃圾回收器引起的吗?
在我的上一个应用程序中,我使用了命令lua_gc(thread,LUA_GCSTOP,0(,但错误仍然存在。
我尝试的另一种策略是每次运行lua_resume结束时,我添加了命令lua_settop(线程,0(,以便电池耗尽并不占用任何内存空间。
请帮助我,会发生什么?
Lua线程不像CPU线程。Lua 不是线程安全的;您不能跨实际线程并行执行 Lua 代码。Lua允许协作式多任务处理,但不允许真正的CPU线程。
您可以从不同的 CPU 线程调用不同的实际lua_State
对象,但前提是它们真正独立。如果从根lua_State
创建了 Lua 线程,则无法在该 Lua 线程上调用 Lua 代码,同时在根lua_State
上调用 Lua 代码。如果两个 Lua 线程共享同一个父lua_State
,则不能同时在这两个 Lua 线程上执行 Lua 代码。
所以你需要重组你正在做的事情。不要使用线程,而是使用 lua_newstate
为每个 CPU 线程创建一个 Lua 状态。每个lua_State
将完全独立于其他。
相关文章:
- C++Lua用户数据扰乱了Mathfu浮点值
- 使用 LuaBridge 或 Lua 将对象传递给 Lua 函数C++
- 将 Lua 函数块转换为 C 字符串
- 我可以从 lua 5.0.2 加载用 c++ 编写的 lua 5.3.5 dll 吗?
- 使用 lua 协程 API 和lua_close时出现分段错误
- 使用 C++ 自动 Lua 绑定
- 调用 lua 函数的地址为 C/C++?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- 如何将 Lua 添加到C++项目
- 使用 Lua 中的C++库对象
- 如何在C++中将用户数据从一个 Lua 块传递到另一个块
- 如何使用重新定义的打印函数打印Lua表?
- Lua table in C++ dll
- 在运行时环境中使用 C++ w/ Lua
- 将shared_ptr传递给Lua
- luaL_len is missing in Lua 5.1
- 将向量传递给<struct> Lua 表
- 将 Lua 与 C++ DLL 结合使用
- Lua C API - 从C++分配和使用类的对象成员
- C++中最接近 Lua 表操作的东西是什么?