मैं 2.6.24.3 कर्नेल का उपयोग कर एम्बेडेड लिनक्स प्रोजेक्ट के लिए उपयोगकर्ता स्पेस ऐप पर काम कर रहा हूं। मेरा ऐप दो फाइल नोड्स के बीच डेटा पास करता है जो 2 पीथ्रेड बनाते हैं जो प्रत्येक नींद एक एसिंक्रोनस आईओ ऑपरेशन पूरा होने तक पूरा होता है, जिस पर यह जागता है और पूरा होने वाला हैंडलर चलाता है।क्या मैं महत्वपूर्ण कोड में लिनक्स उपयोगकर्ता स्पेस पर्थ्रेड उपज को रोक सकता हूं?
पूरा करने वाले हैंडलरों को ट्रैक रखने की आवश्यकता है कि कितने स्थानान्तरण लंबित हैं और कुछ हद तक जुड़ी सूचियों को बनाए रखने की आवश्यकता है जो एक थ्रेड जोड़ देगा और दूसरा हटा देगा।
// sleep here until events arrive or time out expires
for(;;) {
no_of_events = io_getevents(ctx, 1, num_events, events, &timeout);
// Process each aio event that has completed or thrown an error
for (i=0; i<no_of_events; i++) {
// Get pointer to completion handler
io_complete = (io_callback_t) events[i].data;
// Get pointer to data object
iocb = (struct iocb *) events[i].obj;
// Call completion handler and pass it the data object
io_complete(ctx, iocb, events[i].res, events[i].res2);
}
}
मेरा प्रश्न यह है ...
वहाँ एक आसान तरीका मैं उपज के बजाय म्युटेक्स/स्पिन ताला मार्ग नीचे जा रहा है जबकि यह पूरा होने के संचालक बने रास्ते से वर्तमान में सक्रिय धागा रोका जा सकता है?
या विफल होने पर लिनक्स को एक पेंथ्रेड उत्पन्न करने से रोकने के लिए कॉन्फ़िगर किया जा सकता है जब एक म्यूटेक्स/स्पिन लॉक होता है?
आवश्यकता मुख्य रूप से कोड को सरल रखने की कोशिश करने में से एक है, ऐसे कई आइटम हैं जिन्हें पूरा करने वाले हैंडलर के भीतर म्यूटक्स की आवश्यकता होगी, लेकिन यदि आप आश्वस्त कर सकते हैं कि यह केवल हैंडलर के बाहर पैदा होगा, मुझे नहीं लगता कि आपको किसी की आवश्यकता होगी । मुझे लगता है कि दूसरा विकल्प सिर्फ पूरे हैंडलर के चारों ओर एक मोटे म्यूटेक्स लगाया गया है। – KermitG
@ किर्मिट जी: यदि आप पूरा होने वाले हैंडलर कोड के बारे में चिंतित हैं तो कोड के साथ किसी अन्य धागे में दौड़ते हैं, तो केवल प्रीमिशन को रोकने में मदद नहीं होगी। जब पूरा होल्डर शुरू होता है तो दूसरा धागा महत्वपूर्ण खंड में हो सकता है; भले ही आप इसे पूरा करते हैं, जबकि पूरा होने वाला हैंडलर चलता है, फिर भी वह उस डेटा को देखेगा जो इसके तहत से बाहर निकलने पर काम कर रहा है। सामान्यतः यदि हैंडलर में कोड दौड़ सकता है, तो हैंडलर को लॉक करने के लिए जिम्मेदार होना चाहिए। – caf