lua_newthread正在停止

lua_newthread is stopping

本文关键字:newthread lua      更新时间:2023-10-16

我正在使用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将完全独立于其他。