gpt4 book ai didi

c++ - lua_newthread 正在停止

转载 作者:行者123 更新时间:2023-11-30 02:06:57 25 4
gpt4 key购买 nike

我在 LUA 的线程中工作,我在我的代码中使用 lua_newthread 必须执行相同的功能 n 次。

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

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

我尝试的另一种策略是在每次运行 lua_resume 结束时,我添加了命令 lua_settop(thread, 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_newthread 正在停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8365336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com