12
lua_lock和lua_unlock有什麼意義?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);
}
下意味着什麼都不做:
#define lua_lock(L) ((void) 0)
#define lua_unlock(L) ((void) 0)
請指教。
如果這必須是互斥保護的其他archs,爲什麼它在x86 64位的Ubuntu沒有必要? [我正在運行的系統] – anon 2010-06-10 01:02:28
如果您允許從多個線程爲同一個'lua_State'調用Lua API,那麼您必須*定義合適的'lua_lock'和'lua_unlock'。默認構建不會這樣做,因爲它會損害最常見的單線程案例的性能,所以您不能在多個線程中使用單個'lua_State'。 – RBerteig 2010-06-10 22:59:50
如果你實現多個線程擁有你自己的,你仍然需要小心。如果兩個線程試圖同時迭代一個表,lua_lock和lua_unlock將不夠用。 – 2012-03-30 02:54:49