Lua C - 有没有办法在 C 中保留一个值,但仍然没有垃圾收集?

问题描述

我正在 lua c 中创建一个线程,但我想将它保留在 C 中,而不是使其成为环境/等中的变量。但是当我扔掉由 lua_newthread 推送的线程值时,它很快就会被收集起来,因此变得毫无用处。 在这个线程中,我想运行用户传递的任意 lua 代码,允许他们使用与其他线程隔离的专有函数/变量。

有没有办法将线程/用户数据/表值标记为不可收集垃圾

解决方法

不,您必须在某处引用它或禁用 GC。 使用 lua_ref 来引用是在最隐蔽的地方:注册表。 (debug.getregistry())

,

这是可能的。 您可以使用 TValue 的 gcobj 作为参数添加对 gc_mark 的调用到 gc_markroots 中。