¿Cuál es el punto de lua_lock y lua_unlock?¿Propósito de lua_lock y lua_unlock?
El siguiente implica que es importante:
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);
}
El siguiente implica que no hace nada:
#define lua_lock(L) ((void) 0)
#define lua_unlock(L) ((void) 0)
favor ilumine.
Si esto tiene que ser mutex-protegido en el resto de arquitecturas, por qué no es necesario en Ubuntu de 64 bits en x86 ? [el sistema en el que me estoy ejecutando] – anon
Si permite que la API Lua sea llamada para el mismo 'lua_State' de múltiples hilos, entonces * debe * definir un' lua_lock' y 'lua_unlock' apropiados. La compilación predeterminada no hace esto porque daña el rendimiento para el caso de subproceso más común, por lo que no puede usar un solo 'lua_State' de varios subprocesos. – RBerteig
Aún debe tener cuidado si implementa varios hilos propios. Si dos hilos intentan iterar sobre una tabla al mismo tiempo, lua_lock y lua_unlock no serán suficientes. –