2010-06-10 12 views
13

मेरे पास 4 थ्रेड के साथ एक प्रोग्राम है।एकाधिक थ्रेडेड प्रोग्राम में एकाधिक लुआ उदाहरण एम्बेड करना

प्रत्येक धागे के भीतर, मैं luaL_newstate() करता हूं;

प्रत्येक थ्रेड के पास केवल अपने स्वयं के लुआ उदाहरण तक पहुंच है।

क्या मुझे कुछ चिंता करने की ज़रूरत है? [अर्थात। क्या कोई छिपी हुई स्थिति है कि सभी लुआ इंस्टेंस मेरी पीठ के पीछे साझा करते हैं?]

धन्यवाद!

उत्तर

19

नहीं, यह ठीक काम करना चाहिए। सभी दुभाषिया राज्य प्रत्येक लुआ उदाहरण में स्वयं निहित है। मैं यह भी कहूंगा कि लूआ को एकाधिक धागे और/या प्रक्रियाओं के साथ उपयोग करने का पसंदीदा तरीका है।

यदि आपको लगता है कि आपको अंततः लुआ राज्यों के बीच संवाद करने की आवश्यकता है, तो डेटा को क्रमबद्ध करना और सी एपीआई का उपयोग करके इसे पास करना सबसे अच्छा है। मैं "Exploring Lua for Concurrent Programming" श्वेतपत्र पढ़ने की सलाह देता हूं। इसके लिए inter-process communicationmessage passing के साथ कई लुआ processes का उपयोग करने का एक तरीका है परिचय देता है।

5

एक धागा lua_State प्रति थ्रेड बनाना लुआ निष्पादन के कई धागे होने का एक अच्छा समाधान है। हालांकि, उन राज्यों बहुत अलग हैं। विशेष रूप से, उनके बीच सुरक्षित रूप से संवाद करना मुश्किल है क्योंकि लुआ एपीआई केवल थ्रेड-सुरक्षित है जब तक कि प्रत्येक lua_State को एक ही थ्रेड से एक समय में एक्सेस किया जाता है। (ठीक है, जब तक कि lua_lock और lua_unlock एक उपयुक्त म्युटेक्स, जो वे lua कोर के बनाता है डिफ़ॉल्ट में नहीं हैं के रूप में लागू कर रहे हैं।)

तो अलगाव के उस स्तर स्वीकार्य नहीं है, तो आप कई में से एक की जांच करने की जरूरत है लूआ को थ्रेडेड प्रक्रिया में दूसरों के साथ अच्छी तरह से खेलने की इजाजत देने के लिए तंत्र।

मेरी पसंदीदा पसंद Lua Lanes है जो संदेशों को पारित करने और थ्रेड-सुरक्षित तरीके से उनके बीच मूल्य साझा करने के लिए एक तंत्र के साथ कई धागे प्रदान करता है। अधिकांश लूआ प्रकारों के मूल्य (userdata सहित लाइब्रेरी से थोड़ा सी पक्ष समर्थन के साथ) सुरक्षित रूप से और कुशलता से एक लेन से दूसरे में पारित किया जा सकता है।

अन्य तंत्र मौजूद हैं, और उनमें से अधिकांश के लिए एक अच्छा प्रारंभिक बिंदु लुआ उपयोगकर्ता के wiki page on MultiTaksing पर है।

3

आप तब तक अच्छे हैं जब तक आप लू इंस्टेंस के बीच मूल्यों को पारित किए बिना मूल्यों को पारित करने की कोशिश न करें। उदाहरण के लिए, उदाहरणों के बीच एक परिवर्तनीय तालिका साझा करना लगभग असंभव होगा।

जो आप पूछते हैं वह करना आसान लगता है लेकिन यह आवश्यक नहीं है कि कई प्रक्रियाएं चलने से कहीं अधिक उपयोगी हों, प्रत्येक के अपने स्वयं के लुआ और इसके स्वयं के पता स्थान के साथ।

संबंधित मुद्दे