我的问题是:如何使用Lua堆栈(lua_State)实现线程本地存储之类的东西?一些值将存储在lua状态,可以通过lua脚本和C API访问。
答案 0 :(得分:2)
有几种方法可以做到这一点。我写了一篇关于它的论文;它是Lua Programming Gems
中的第1章最简单的方法可能是在注册表中创建一个表,其中的键是lua_States,值是您的线程本地数据。使表中的表变弱,以便在收集线程时释放线程本地数据。
如果只需要从C库中获取并访问线程本地数据,则可以将类似的表保存在库函数的共享upvalue中。使用luaL_setfuncs向共享upvalue表注册函数。使用这种技术的优点是线程本地数据是C库的私有。