2011-04-08 12 views
6

क्या प्रत्येक थ्रेड डिफ़ॉल्ट रूप से एक संबंधित प्रेषण कतार है? मैं बस सोच रहा हूं कि क्या मैं प्रत्येक संदर्भ में dispatch_semaphore एस का उपयोग कर सकता हूं, या यदि मुझे परिभाषित कतार के साथ एक स्पष्ट प्रेषण कॉल में लपेटने की आवश्यकता है।क्या प्रत्येक एनएसटीएचड स्वचालित रूप से एक प्रेषण कतार है?

उत्तर

7

यह वास्तव में आपके प्रश्न का तात्पर्य नहीं है। डिफ़ॉल्ट रूप से, मुख्य थ्रेड से जुड़े मुख्य प्रेषण कतार, और क्रमशः तीन वैश्विक कतार (उच्च, डिफ़ॉल्ट और निम्न प्राथमिकताओं) हैं जो समवर्ती हैं।

समवर्ती कतार किसी भी विशेष धागे से जुड़े होने के बजाय अपने स्वयं के धागे संसाधनों का प्रबंधन करते हैं।

वास्तव में, यह dispatch_queue_create() के लिए आदमी पृष्ठ पर काफी विशेष रूप से कहते हैं:

"कतार निष्पादन और स्वतंत्र कतारों को प्रस्तुत ब्लॉक के किसी भी विशिष्ट धागा करने के लिए बाध्य नहीं कर रहे हैं समवर्ती निष्पादित कर सकते हैं।"

इस संबंध में कि आप प्रेषण कतारों (आपके प्रश्न के दूसरे भाग) के बाहर प्रेषण सेमफोर का उपयोग कर सकते हैं, तो जवाब हाँ है, आप कर सकते हैं। वे मैक सेमफोर के शीर्ष पर लागू किए जाते हैं, और हर जगह काम करना चाहिए। आप यहां कोड देख सकते हैं:

http://opensource.apple.com/source/libdispatch/libdispatch-84.5.5/src/semaphore.c

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