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

线程是如何分配到队列大中央调度的实现细节。分派给一个(串行或并发)队列 两个块不一定在同一 线程执行。唯一的例外是只在主线程上执行的“主队列”。

如果你真的有一个代码执行相同的线程上的要求,你必须 使用不同的穿线方法,例如NSThreadpthread_create

+0

我应该在哪里看,文件明智的,为了解这一点,串行和并行线程之间的区别是什么?我只有置身于最简单的GCD方法和C. –

+0

@NickC线程:“并发编程指南”(https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/简介/ Introduction.html),[ “线程编程指南”(https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html#//apple_ref/doc/uid/10000057i)。 –

+0

最后一件事 - 说我发送一个块到global_queue上的dispatch_async - 是在同一个线程上执行的整个方法吗? –

相关问题