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

时间:2013-05-18 15:37:49

标签: lua

Lua提供了一个"registry"“,任何C代码都可以使用它来存储它需要存储的任何Lua值”。并且线程“与原始线程共享其全局环境”,如here所述。但是,如果它共享登记册,我找不到它所说的任何地方。

所以这基本上是我的问题:如果线程是从相同的原始状态派生的,那么它们是否共享可在LUA_REGISTRYINDEX访问的表?

1 个答案:

答案 0 :(得分:2)

Lua注册表是lua_State*的一部分,因此在给定的Lua_state(例如Lua线程:协同例程)中使用或包含的任何内容也将共享其注册表。

Lua Threads (协同例程)是他们创建的lua_State*的一部分,因此共享同一个注册表。

操作系统线程将访问与传递给lua_State* (等)lua_getfield(...)相关联的任何注册表。
请记住,Lua对OS线程的唯一保证是Lua CAPI是可重入的,并将其所有值存储在lua_State*;由您自己管理状态以避免同时访问和损坏。