मुझे लगता है कि इस सवाल पूछने के लिए सबसे अच्छा तरीका है कुछ कोड के साथ है:उद्देश्य-सी में ग्रैंड सेंट्रल डिस्पैच के साथ किस व्यवहार की गारंटी है?
//Main method
for(int i = 0; i < 10; i++)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self foo:i];
});
}
- (void) foo: (int) i
{
@synchronized(self)
{
NSLog(@"%d",i);
}
}
इस मामले में, यह गारंटी है कि संख्या 0-9 क्रम में मुद्रित हो जाएगा? क्या कभी ऐसा मौका है कि रन कतार में इंतजार कर रहे धागे में से एक को छोड़ दिया जाएगा? वास्तविकता में कैसे। वास्तव में, क्या ऐसा कभी होता है? क्या होगा यदि मैं उपरोक्त व्यवहार चाहता था (अभी भी धागे का उपयोग कर रहा हूं); मैं इसे कैसे पूरा कर सकता हूं?
थ्रेड और जीसीडी ब्लॉक "छोड़ दिया" नहीं मिलता है। यदि कोई थ्रेड अपवाद फेंकता है, तो आप बिना किसी स्पष्ट प्रयास के कभी नहीं जानते क्योंकि जीसीडी अपवाद हैंडलिंग का त्याग करता है। – CodaFi