Wikipedia entry का एक पठन है।
थ्रेड-लोकल स्टोरेज ऐसा कुछ नहीं है जो सी ++ के लिए विशेष है। कभी-कभी यह विभिन्न नामों से जाता है, जैसे "टीएलएस" (केवल थ्रेड-लोकल स्टोरेज का संक्षेप), या "थ्रेड-विशिष्ट स्टोरेज" (टीएसएस)।
अधिकांश ऑपरेटिंग सिस्टम प्रति-थ्रेड स्टोरेज तक पहुंचने के लिए एपीआई प्रदान करते हैं। उदाहरण के लिए, विंडोज़ में "टीएलएस" से शुरू होने वाला bunch of API functions है। हुड के तहत, Win32 एक विशेष सीपीयू रजिस्टर (x86 पर एफएस) के माध्यम से सुलभ, उपयोगकर्ता थ्रेड-स्थानीय स्टोरेज सहित विभिन्न प्रकार के प्रति-थ्रेड डेटा के लिए एक विशेष क्षेत्र सुरक्षित रखता है। लिनक्स pthread_key_create जैसे नामों के साथ, लिथ्रेड एपीआई के माध्यम से थ्रेड-विशिष्ट स्टोरेज प्रदान करता है, और इन्हें आम तौर पर इसी तकनीक का उपयोग करके लागू किया जाता है।
यह संभव है कि एक ओएस बिल्कुल कोई समर्थन प्रदान न करे। हालांकि, यदि ओएस एक एपीआई के माध्यम से एक प्रक्रिया-अद्वितीय थ्रेड आईडी प्रदान करता है, तो सी ++ रनटाइम लाइब्रेरी कुछ std::map<thread_id, per_thread_storage>
आंतरिक रूप से कुछ अवधारणात्मक रूप से बनाए रख सकती है। बेशक, तो per_thread_storage
क्या है इसकी एक समस्या है। यदि कोई प्रोग्राम स्थैतिक रूप से जुड़ा हुआ था, तो यह प्रोग्राम में घोषित सभी थ्रेड-स्थानीय स्टोरेज चर के साथ एक बड़ी संरचना के लिए सूचक की तरह कुछ हो सकता है। यह एक oversimplification है, लेकिन आप सामान्य विचार मिलता है।
थ्रेड-स्थानीय स्टोरेज वेरिएबल एक्सेस करना स्पष्ट रूप से केवल एक सीधी मेमोरी पढ़ या लिखना नहीं है। यह संभावित रूप से उससे थोड़ा अधिक शामिल है। यदि आप किसी विशेष फ़ंक्शन में थ्रेड-लोकल/विशिष्ट स्टोरेज का उपयोग करने जा रहे हैं, तो मैं अनुशंसा करता हूं कि आप थ्रेड-स्थानीय स्टोरेज पॉइंटर को स्थानीय चर में पहले कॉपी करें।
सी ++ मानक में शून्य (या बहुत कम) कार्यान्वयन विवरण है। –
यह अब मदद कर सकता है: http://www.akkadia.org/drepper/tls.pdf –