我有一个C函数,它调用一个lua函数,然后启动一系列在C和lua之间跳转的异步回调。我希望所涉及的所有C函数能够访问我在原始C函数中创建的某些特定用户数据。但棘手的部分是:所有这些都应该是线程安全的,而且我也无法更改API,因此在整个回调中传递参考值不是一种选择。
那么有没有办法以某种方式将userdata放在lua_State中,只有" my"回调链可以访问它吗?
答案 0 :(得分:0)
由于Lua对同一lua_State
实例中的数据争用没有线程安全保证,因此我假设您的C代码确保在任何一个代码中只有一段代码与同一lua_State
进行通信时间。
处理此问题的常用方法是Lua registry。它是一个特殊的表,它是lua_State
的一部分,可以从任何C代码访问。您在注册表中指定一些键作为您的特殊值。
Lua代码无法访问Lua注册表,除非某些C代码允许他们访问它(BTW:不这样做)。因此,只要您保持此表的完整性,就不必担心Lua脚本会触及并破坏它。