Was ist der Punkt von lua_lock und lua_unlock?Zweck von lua_lock und lua_unlock?
Im Folgenden bedeutet, es ist wichtig:
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);
}
Im Folgenden bedeutet es nichts tut:
#define lua_lock(L) ((void) 0)
#define lua_unlock(L) ((void) 0)
Bitte aufklären.
Wenn dies auf andere Archs Mutex-geschützt sein muss, warum ist es nicht notwendig, auf 64-Bit Ubuntu auf x86 ? [das System, auf dem ich arbeite] – anon
Wenn Sie zulassen, dass die Lua-API für denselben 'lua_State' aus mehreren Threads aufgerufen wird, dann müssen Sie * einen geeigneten' lua_lock' und 'lua_unlock' definieren. Das Standard-Build führt dies nicht durch, da es die Leistung für den häufigsten Einzel-Thread-Fall beeinträchtigt, so dass Sie nicht einen einzelnen "Lua_State" aus mehreren Threads verwenden können. – RBerteig
Sie müssen immer noch vorsichtig sein, wenn Sie mehrere eigene Threads implementieren. Wenn zwei Threads gleichzeitig versuchen, über eine Tabelle zu iterieren, sind lua_lock und lua_unlock nicht ausreichend. –