2011-11-17 10 views
7

makecontext पुस्तिका से साथ काम नहीं करता ...क्यों makecontext वर्तमान pthread कार्यान्वयन, makecontext प्रोग्राम जो pthread (3) पुस्तकालय के खिलाफ लिंक में नहीं किया जाना चाहिए में सीमाओं के कारण pthreads

(धागे हैं या नहीं इस्तेमाल किया या नहीं)।

अब मेरा सवाल है, यह क्यों काम नहीं करता है और वैकल्पिक तरीके क्या हैं। असल में मुझे कुछ बिंदुओं पर उपयोगकर्ता स्तर के धागे में ढेर स्विच करने में दिलचस्पी है, लेकिन मैं देख रहा हूं कि जब मैं swapcontext करता हूं, तो मुझे हर समय विभाजन खंड मिलते हैं। मुझे क्या करना चाहिए?

मैं कुछ इस तरह हासिल करना चाहते हैं ...

void thread_func(void * thread_args) 
{ 
a(); 
b(); 
getcontext/makecontext/swapcontext to call c(); 
d(); 
.... 
} 

तो इस मामले में, मैं जब समारोह को क्रियान्वित करने के लिए एक अलग ढेर उपयोग करना चाहते हैं।

+0

बहुत मुश्किल सवाल; -पी! अभी तक कोई असर नहीं! – MetallicPriest

+0

आप 'makecontext'/etc का उपयोग करने की कोशिश कर रहे हैं? उनका मुख्य उद्देश्य थ्रेडिंग लाइब्रेरी को लागू करने में है, जो कि पहले से मौजूद होने पर मूर्खतापूर्ण है। – duskwuff

+0

@ डस्कवफ, मैं थ्रेडिंग उद्देश्यों के लिए इसका उपयोग नहीं कर रहा हूं। – MetallicPriest

उत्तर

9

वर्तमान pthread कार्यान्वयन में सीमाओं के कारण, makecontext प्रोग्राम जो (3) पुस्तकालय pthread के खिलाफ लिंक में नहीं किया जाना चाहिए

मैनुअल की धारा LinuxThreads, जो दौर के लिए इस्तेमाल किया पर लागू होने वाला वर्तमान थ्रेड डिस्क्रिप्टर को खोजने के लिए %esp मूल्य। यदि आप वैकल्पिक स्टैक पर निष्पादित कर रहे थे तो वह (स्पष्ट रूप से) एक मान्य थ्रेड डिस्क्रिप्टर नहीं देगा।

लिनक्स थ्रेड्स का उपयोग अब पिछले 5+ वर्षों में वितरित किसी भी लिनक्स द्वारा नहीं किया जाता है, और {get,make,swap}context एनपीटीएल धागे के साथ ठीक काम करता है।

संपादित करें: वास्तव में, मैं केवल "सीमाओं के कारण" NetBSD docs में देखते हैं, Linux docs में नहीं।

जब मैं swapcontext करते हैं, मैं विभाजन दोष मिल हर अब और फिर

आपको एक बग है कि अब और फिर एक विभाजन गलती के रूप में दिखाई देता है। आपने यह अनुमान लगाने के लिए पर्याप्त जानकारी नहीं दी है कि वह बग कहां हो सकता है।

+1

यह जानकर अच्छा लगा कि यह अब काम करता है। उत्तर के लिए धन्यवाद नियोजित रुशियन: -पी! और हाँ, यह वास्तव में एक बग था जिसे मैंने अभी तय किया है। – MetallicPriest

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