मैं वर्तमान में एक बहु-थ्रेडेड एप्लिकेशन पर काम कर रहा हूं जो हाथ और पीपीसी आर्किटेक्चर पर तैनात किया जाएगा। मुझे हाथ पर pthread_cancel के साथ कुछ समस्या है।pthread_cancel बांह और पीपीसी पर अलग-अलग व्यवहार करता है?
हाथ पर pthread_cancel पीपीसी के साथ व्यवहार नहीं करता है। थ्रेड रद्द हो जाता है लेकिन थ्रेड के स्थानीय चर के लिए विनाशक को हाथ पर नहीं बुलाया जा रहा है। मैंने pthread_cleanup_push के माध्यम से स्थापित रद्दीकरण क्लीनअप हैंडलर रूटीन को स्पष्ट रूप से परिभाषित करने का भी प्रयास किया। लेकिन धागा रद्द होने पर इसे नहीं कहा जा रहा है।
कोड पीपीसी के साथ ठीक काम करता है। जब एक धागा रद्द कर दिया जाता है, तो स्थानीय चर के विनाशक को बुलाया जा रहा है। और जब मैंने स्पष्ट रूप से क्लीनअप हैंडलर को परिभाषित किया, तो इसे pthread_cancel कहा जाता था जब इसे बुलाया और निष्पादित किया गया था।
क्या मुझे कुछ याद आ रही है? शायद कुछ कंपाइलर विकल्प?
- प्रोग्रामिंग भाषा: सी ++
- संकलनकर्ता: हाथ-linux-जी ++/PowerPC-linux-जी ++
- ओएस: लिनक्स
संपादित करें:
मैं एक तरह से मिल गया है इस समस्या को libc bug पर लॉग ऑन किया गया।
जी ++ के बजाय जीसीसी का उपयोग करना और जोड़ने -फनो-अपवाद कंपाइलर विकल्प ने चाल की। लेकिन मैं वास्तव में इस मुद्दे के पीछे सामान समझना चाहता हूं। इसके अलावा, -फनो-अपवाद का अर्थ है कि मैं अपने आवेदन में अपवाद हैंडलिंग करने में सक्षम नहीं हूं, न कि मैं अब इसका उपयोग कर रहा हूं लेकिन मैं भविष्य में हो सकता हूं।
धन्यवाद।
कृपया भाषा और compilers (दोनों प्लेटफार्मों के लिए) का उपयोग किया निर्दिष्ट करें। यह सी ++ की तरह लगता है, लेकिन यह स्पष्ट होना बेहतर है। – unwind
यह यह जानने में भी मदद करेगा कि कौन सा ओएस पाथ्रेड पैकेज अक्सर ओएस विशिष्ट है। – Benoit
मैं लिनक्स कर्नेल के सटीक संस्करण को सूचीबद्ध करने का भी सुझाव दूंगा, जो प्रत्येक मामले में उपयोग किए जाने वाले प्लेटफ़ॉर्म समर्थन को लक्षित करता है, और जीसीसी/जी ++, libc, और शामिल किसी अन्य सॉफ़्टवेयर के संस्करण। सटीक संस्करण संख्याओं के बिना अच्छी सलाह के साथ आना बहुत मुश्किल है। – jakobengblom2