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 पर होने की जरूरत है, तो क्यों यह 86 पर 64-बिट Ubuntu पर आवश्यक नहीं है ? [जिस प्रणाली पर मैं चल रहा हूं] – anon
यदि आप लूआ एपीआई को एकाधिक थ्रेड से उसी 'lua_State' के लिए बुलाए जाने की अनुमति देते हैं, तो आपको * उचित' lua_lock' और 'lua_unlock' को परिभाषित करना होगा। डिफ़ॉल्ट बिल्ड ऐसा नहीं करता है क्योंकि यह सबसे आम सिंगल-थ्रेड केस के लिए प्रदर्शन को नुकसान पहुंचाता है, इसलिए आप एकाधिक थ्रेड से एकल 'lua_State' का उपयोग नहीं कर सकते हैं। – RBerteig
यदि आप एकाधिक धागे स्वयं को लागू करते हैं तो आपको अभी भी सावधान रहना होगा। यदि दो धागे एक ही समय में एक टेबल पर फिर से प्रयास करने का प्रयास करते हैं तो lua_lock और lua_unlock पर्याप्त नहीं होंगे। –