Lua提供了一个"registry"“,任何C代码都可以使用它来存储它需要存储的任何Lua值”。并且线程“与原始线程共享其全局环境”,如here所述。但是,如果它共享登记册,我找不到它所说的任何地方。
所以这基本上是我的问题:如果线程是从相同的原始状态派生的,那么它们是否共享可在LUA_REGISTRYINDEX访问的表?
答案 0 :(得分:2)
Lua注册表是lua_State*
的一部分,因此在给定的Lua_state(例如Lua线程:协同例程)中使用或包含的任何内容也将共享其注册表。
Lua Threads (协同例程)是他们创建的lua_State*
的一部分,因此共享同一个注册表。
操作系统线程将访问与传递给lua_State*
(等)的lua_getfield(...)
相关联的任何注册表。
请记住,Lua对OS线程的唯一保证是Lua CAPI是可重入的,并将其所有值存储在lua_State*
;由您自己管理状态以避免同时访问和损坏。