2013-05-18 56 views
1

Lua提供了一个"registry"“可以被任何C代码用来存储它需要存储的任何Lua值”。线索“与原始线索共享其全球环境”,如here所述。但我找不到它说共享寄存器的地方。Lua注册表:它由线程共享?

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

+1

所有线程共享相同的虚拟机,因此,它的注册表。 –

+0

@EgorSkriptunoff谢谢......您是否在线程之间使用了共享注册表?它工作吗? – dsign

+2

Lua“线程”不是通常的操作系统线程。它们仅用于[协程](http://lua-users.org/wiki/CoroutinesTutorial)。 Lua VM以单线程模式工作(仅使用一个CPU内核)。 –

回答

2

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

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

OS线程将访问的任何注册表与传递给lua_getfield(...)lua_State*(等人)相关联。
考虑到Lua关于操作系统线程的唯一保证是Lua CAPI可重入并将其所有值存储在lua_State*;它由你来管理状态,以避免同时访问和腐败。