我有一个 C 函数,它调用一个 lua 函数,该函数反过来启动一长串在 C 和 lua 之间跳转的异步回调。我希望所有涉及的 C 函数都能够访问我在原始 C 函数中创建的某些特定用户数据。但棘手的部分是:所有这些都应该是线程安全的,而且我不能更改 API,因此在整个回调中传递引用值不是一个选项。
那么有没有办法以某种方式将用户数据放入 lua_State 中,以一种只有“我的”回调链才能访问它的方式?
最佳答案
因为 Lua 对同一个 lua_State
实例中的数据竞争没有线程安全保证,我假设你的 C 代码确保只有一段代码与同一个 lua_State< 通信
在任何时候。
通常的处理方式是通过 Lua registry .它是一个特殊的表,是 lua_State
的一部分,可从任何 C 代码访问。您指定注册表中的某个键作为您的特殊值。
Lua 代码无法访问 Lua 注册表,除非某些 C 代码允许它们访问它(顺便说一句:不要这样做)。因此,只要您保持此表的完整性,就不必担心 Lua 脚本会伸出并破坏它。
关于c - 以线程安全的方式将userdata放在lua栈中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425891/