1

我正在使用 LUA 的线程,并且在我的代码中为此使用 lua_newthread 必须执行相同的功能 n 次。

为了与比赛的线程一起工作,在 C++ 中实例化一些线程并为每个线程分配一个 lua_state,这个 lua_state = lua_newthread。该线程仅在应用程序结束时被销毁,因此我总是重用这些线程的属性 lua_state。我的问题是,在运行一段时间后,应用程序发生崩溃,这可能是由垃圾收集器引起的吗?

在我的上一个应用程序中,我使用了命令 lua_gc (thread, LUA_GCSTOP, 0),但错误仍然存​​在。

我尝试的另一个策略是每次运行 lua_resume 结束时,我添加了命令 lua_settop (thread, 0),这样就耗尽了电池并且不消耗任何内存空间。

请帮帮我,会发生什么?

4

1 回答 1

4

Lua 线程不像CPU 线程。Lua 不是线程安全的;你不能跨实际线程并行执行 Lua 代码。Lua 允许协作多任务,但不允许真正的 CPU 线程。

您可以从不同的 CPU 线程调用不同的实际lua_State对象,但前提是它们真正分开。如果您从根创建了 Lua 线程lua_State,那么您不能在该 Lua 线程上调用 Lua 代码,同时也调用根上的 Lua 代码lua_State。如果两个 Lua 线程共享同一个 parent lua_State,你不能同时在这两个 Lua 线程上执行 Lua 代码。

所以你需要重组你正在做的事情。不使用线程,而是使用lua_newstate为每个 CPU 线程创建一个 Lua 状态。每个lua_State都将完全独立于其余部分。

于 2011-12-03T04:12:33.400 回答