2

Lua 提供了一个“注册表”,“任何 C 代码都可以使用它来存储它需要存储的任何 Lua 值”。正如这里所说,线程“与原始线程共享其全局环境” 。但是我找不到任何地方说如果它共享寄存器。

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

4

1 回答 1

3

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

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

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

于 2013-08-27T22:44:42.670 回答