2013-05-18 55 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*;它由你來管理狀態,以避免同時訪問和腐敗。