Lua,实现C API可访问的线程本地存储

时间:2013-02-08 10:24:15

标签: c multithreading lua

我的问题是:如何使用Lua堆栈(lua_State)实现线程本地存储之类的东西?一些值将存储在lua状态,可以通过lua脚本和C API访问。

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。我写了一篇关于它的论文;它是Lua Programming Gems

中的第1章

最简单的方法可能是在注册表中创建一个表,其中的键是lua_States,值是您的线程本地数据。使表中的表变弱,以便在收集线程时释放线程本地数据。

如果只需要从C库中获取并访问线程本地数据,则可以将类似的表保存在库函数的共享upvalue中。使用luaL_setfuncs向共享upvalue表注册函数。使用这种技术的优点是线程本地数据是C库的私有。