2011-07-02 13 views
9

मेरी समझ यह है कि आईओएस __thread का समर्थन नहीं करता है। जाहिर है, pthread_setspecific का उपयोग करके ऐसा करने का एक तरीका है। हालांकि, क्या पहले से ही एक टेम्पलेट वर्ग है जिसने इस कार्यक्षमता को कार्यान्वित किया है?थ्रेड-लोकल स्टोरेज और आईओएस

मैं पहिया का फिर से आविष्कार करना चाहता था, खासकर क्योंकि यह लिखने के लिए कोड का एक साधारण टुकड़ा नहीं होगा।

किसी भी लिंक की अत्यधिक सराहना की जाएगी!

चीयर्स

+1

क्या आप ['boost :: thread_specific_ptr'] (http://boost.org/doc/libs/release/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr) का उपयोग कर सकते हैं? –

+0

@ Space_C0wb0y: मुझे पता है, संभवतः। मुझे इसके बारे में पता नहीं था इसलिए इसकी संभावना है :) – Goz

उत्तर

19

फाउंडेशन -[NSThread threadDictionary] प्रदान करता है। आप थ्रेड-लोकल ऑब्जेक्टिव-सी ऑब्जेक्ट्स को स्टोर करने के लिए इसका उपयोग कर सकते हैं, जिसमें किसी भी गतिशील स्टोरेज के पते को लपेटने में NSValue शामिल हो सकता है।

ध्यान दें कि कोको थ्रेडेड कोड के थ्रेड-अंधा निष्पादन की ओर बढ़ रहा है, जहां आप किसी भी उपलब्ध सिस्टम-स्वामित्व वाले थ्रेड पर चलाने के लिए कोड के ब्लॉक जमा करते हैं। यह ग्रैंड सेंट्रल डिस्पैच और साझा NSOperationQueue एस द्वारा उपयोग किया जाने वाला मॉडल है। थ्रेड-स्थानीय स्टोरेज पर निर्भर कोड इस मॉडल का सबसे अच्छा उपयोग नहीं करेगा। अधिक जानकारी के लिए ऐप्पल के Concurrency Programming Guide देखें।

ईटीए: iOS 5 के साथ शुरू/OS X 10.7, ग्रांड सेंट्रल डिस्पैच प्राप्त क्या आप dispatch_queue_set_specific, dispatch_queue_get_specific, और dispatch_get_specific कार्यों के माध्यम से कतार-स्थानीय भंडारण कह सकते हैं। जब आप कुंजी के लिए नया मूल्य निर्धारित करते हैं या जब कतार नष्ट हो जाती है तो सेटटर आपको मूल्य के अतिरिक्त विनाशक फ़ंक्शन की आपूर्ति करने की अनुमति देता है। गेटर सैन्स कतार वर्तमान कतार का संदर्भ के रूप में उपयोग करता है, और मौजूदा कतार की लक्ष्य कतार पर लुकअप दोहराएगा यदि कुंजी वर्तमान कतार पर परिभाषित नहीं है (प्रोटोटाइप ओओ सिस्टम में संपत्ति लुकअप के समान कैसे)।

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