थ्रेड-स्थानीय संग्रहण केवल स्थैतिक चर पर लागू होता है। गैर स्थैतिक संरचना या कक्षा के सदस्यों को धागा-स्थानीय बनाने में कोई बात नहीं है।
स्थानीय (स्वचालित) चर हमेशा थ्रेड के लिए विशिष्ट होते हैं जो कोड निष्पादित करते हैं, लेकिन डेटा या बीएसएस सेगमेंट में रहने के बाद वैश्विक और स्थैतिक चर को थ्रेड के बीच साझा किया जाता है। टीएलएस उन ग्लोबल वैरिएबल को थ्रेड में स्थानीय बनाने के लिए एक तंत्र प्रदान करता है और यही __thread
कीवर्ड प्राप्त करता है - यह प्रत्येक थ्रेड में चर की एक अलग प्रतिलिपि बनाने के लिए कंपाइलर को निर्देश देता है जबकि यह एक वैश्विक रूप से बना रहता है (उदाहरण के लिए इसे एक्सेस किया जा सकता है निष्पादन के समान धागे के भीतर बुलाए गए विभिन्न कार्यों)। स्टैक पर या तो अगर एक स्वत: चर घोषित किया जाता है या ढेर में new
या malloc()
प्रयोग किया जाता है -
गैर स्थिर वर्ग के सदस्यों और संरचना सदस्यों को एक ही जगह है जहाँ वस्तु (वर्ग या संरचना) आवंटित किया जाता है में रखा जाता है। किसी भी तरह से प्रत्येक थ्रेड को चर के लिए एक अद्वितीय संग्रहण स्थान प्राप्त होता है और __thread
इस मामले में लागू नहीं है, इसलिए आपको प्राप्त होने वाली संकलक त्रुटि।
स्रोत
2012-06-12 14:53:22
करने के लिए
__thread int tl;
में बदल दें संकलक त्रुटि आपको मिलने वाला पोस्ट करना चाहिए। –AFAICS '__thread' मानक नहीं है। आप किस कंपाइलर का उपयोग कर रहे हैं? –