Lua 实现线程本地存储,可通过 C API 访问。

我的问题是:如何使用 Lua 堆栈(lua_State)实现类似线程本地存储的功能?某些值将存储在 Lua 状态中,可从 Lua 脚本和 C API 访问。

点赞
用户33252
用户33252

有几种方法可以实现这个。我写了一篇关于这个的论文; 它是在Lua Programming Gems的第一章。

最简单的方法可能是在注册表中创建一个表,其键为lua_States,值为您的线程本地数据。弱化表中的键,这样当线程被收集时,线程本地数据就会被释放。

如果您的线程本地数据仅在C库中需要和访问,您可以在库函数的共享upvalue中保持类似的表格。使用luaL_setfuncs在共享upvalue表中注册函数。使用这种技术的优势是线程本地数据是私有的C库。

2013-02-09 01:37:05