gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:58 24 4
gpt4 key购买 nike

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

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