Lua注册表:它是由线程共享的吗?

Lua 提供了一个 "注册表",可以用于存储任何需要存储的 Lua 值的 C 代码。并且线程 "与原始线程共享其全局环境",如 此处 所述。但我找不到任何地方说明它是否共用寄存器。

那么这基本上就是我的问题:如果这些线程从同一个原始状态派生而来,它们是否共享在 LUA_REGISTRYINDEX 中可访问的表?

点赞
用户2712809
用户2712809

Lua 中的注册表是 lua_State* 的一部分,因此使用或者包含在给定的 Lua_state 中的任何东西(如 Lua 线程:协同程序)也会共享它的注册表。

Lua 线程(协同程序)是 lua_State* 的一部分,它们从中创建,并且因此共享相同的注册表。

操作系统线程将访问与传递给 lua_getfield(...)(等等)的 lua_State* 相关联的任何注册表。

请注意,Lua 在 OS 线程方面的唯一保证是 Lua CAPI 是可重入的,并将所有值存储在 lua_State* 中。您需要正确地管理状态以避免同时访问和损坏。

2013-08-27 22:44:42