1

Если я хранить dispatch_queue_t так:Выполняет ли вызовы функции dispatch_queue_t в том же потоке?

@property(assign, nonatomic) dispatch_queue_t myQueue; 

...

_myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

Позже, когда я делаю такие операции, как

dispatch_async(_myQueue, ^{ 
    NSLog(@"Hi!"); 
}); 

, а затем где-то еще

dispatch_async(_myQueue, ^{ 
    NSLog(@"Hello!"); 
}); 

Эти блоки выполнены в одной и той же резьбе? Если нет, как я могу убедиться, что они есть? В основном я хочу сохранить ссылку на поток и заставить его выполнять некоторые действия только в этом потоке.

ответ

5

Как потоки назначаются для очередей - это деталь реализации Grand Central Dispatch. Два блока, отправленные в (последовательную или параллельную) очередь, не обязательно выполняются в той же самой строке . Единственным исключением является «главная очередь», которая выполняется только в основном потоке.

Если у вас действительно есть требование, чтобы код выполнялся в одном потоке, у вас есть , чтобы использовать другой метод потоковой передачи, например. NSThread или pthread_create.

+0

Где я должен искать документацию, чтобы узнать об этом и о различиях между последовательными и параллельными потоками? У меня было только простейшие методы GCD и потоки в C. –

+0

@NickC: ["Руководство по программированию параллелизма"] (https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/ Введение/Введение.html), [«Руководство по программированию потоков»] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html#//apple_ref/doc/uid/10000057i). –

+0

Последнее: скажите, что я посылаю блок dispass_async в global_queue - это весь метод, выполненный в том же потоке? –

Смежные вопросы