c - 以线程安全的方式将userdata放在lua栈中

标签 c lua

我有一个 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/

相关文章:

c - recv 不会将整个消息保存在缓冲区中

lua - 清除变量以释放 Lua/Torch 中的内存(GPU 或 CPU)

Lua - 尝试为静态链接的 Lua 添加扩展时出现 "multiple vms detected"

lua:检索表中的键列表

c - 简单交换后 DWORD 强制转换为 float ?

更改入口点 "main"

c++ - 如何更改条件编译禁用的代码的字体或颜色设置?

c - 如果 "i = i++"不被视为未定义行为会发生什么?

lua - 全局变量_G有多特殊?

c++ - Lua C 5.1 - 遍历所有全局值