lua_lock和lua_unlock有什么意义?
以下含义非常重要:
LUA_API void lua_gettable (lua_State *L, int idx) {
StkId t;
lua_lock(L);
t = index2adr(L, idx);
api_checkvalidindex(L, t);
luaV_gettable(L, t, L->top - 1, L->top - 1);
lua_unlock(L);
}
LUA_API void lua_getfield (lua_State *L, int idx, const char *k) {
StkId t;
TValue key;
lua_lock(L);
t = index2adr(L, idx);
api_checkvalidindex(L, t);
setsvalue(L, &key, luaS_new(L, k));
luaV_gettable(L, t, &key, L->top);
api_incr_top(L);
lua_unlock(L);
}
Run Code Online (Sandbox Code Playgroud)
以下暗示它什么都不做:
#define lua_lock(L) ((void) 0)
#define lua_unlock(L) ((void) 0)
Run Code Online (Sandbox Code Playgroud)
请指教.
Mar*_*off 20
如果您将Lua移植到另一个平台,则"允许" lua_lock使用您自己的定义覆盖; 并且这个定义本质上应该是一个互斥体,以禁止在相同的Lua对象上进行跨线程操作.基本上,在实现时,它应该与Python的全局解释器锁(GIL)类似.
它被定义为香草Lua中的无操作,因为vanilla Lua是100%ANSI-C并且在单个线程中运行:不需要实现任何锁定机制.但是,开发人员选择将锁定语句放在那里,用于移植Lua并在解释器中实现线程的人.
资料来源: