1

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

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

4

2 回答 2

1

不,您必须在某处引用它或禁用 GC。用于lua_ref参考的地方大多是隐藏的:注册表。( debug.getregistry())

于 2021-03-25T20:43:54.353 回答
0

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

于 2021-04-30T20:22:55.490 回答