यदि आप केवल इतना है एक dispatch_queue_t
है कि "किसी और" द्वारा पारित किया गया था है, वहाँ आप को पता है के लिए कोई रास्ता नहीं है। वह जानकारी प्रभावी रूप से आप से छिपी हुई है। आप अपने आप को कतारों का निर्माण कर रहे हैं, तो आप dispatch_queue_set_specific
और dispatch_queue_get_specific
इस्तेमाल कर सकते हैं कतार के संदर्भ डेटा में एक मूल्य छिपाया जा, और फिर उस वापस पढ़ें बाहर, लेकिन अगर आप कतार नहीं बना रहे हैं, तो आप भाग्य से बाहर हो।
Fwiw, एक भंगुर डिजाइन/विरोधी पैटर्न पर संकेत इस तरह की। एक पैरामीटर के रूप में एक कतार लेना मतलब है कि आप उस कतार पर भावी निष्पादन के लिए ब्लॉक शेड्यूल करेंगे। उस परिप्रेक्ष्य से इससे कोई फर्क नहीं पड़ता कि कतार समवर्ती या धारावाहिक है या नहीं।
अधिक बिंदु पर, आपका कोड इस तरह लिखा जाना चाहिए कि इससे कोई फर्क नहीं पड़ता कि यह धारावाहिक या समवर्ती कतार पर निष्पादित है या नहीं। यदि यह साझा संसाधनों का उपयोग करता है, तो उसे उन संसाधनों तक पहुंच को सिंक्रनाइज़ करना चाहिए, जैसे कि यदि इसे एक समवर्ती कतार पर निष्पादित किया जाना था, तो उन संसाधनों तक पहुंच सुरक्षित रहेगी। इसके विपरीत, सीरियल कतार पर चलने वाली परिस्थितियों से बचें एक समस्या होगी (यानी dispatch_sync
का उपयोग करके रिकर्सिव ताले को प्राप्त करने की कोशिश न करें जो सीरियल हो सकती है।)
मैं GCD से अभी तक एक और गुडी की खोज की है! धन्यवाद! कुछ साहित्य पढ़ने के बाद, मैं इस निष्कर्ष पर आया हूं कि यह वास्तव में एक अच्छा दृष्टिकोण है। :-) –