ios - 在 dispatch_queue_t 上调用执行是否确保它们在同一个线程上?

标签 ios multithreading objective-c-blocks grand-central-dispatch nsthread

如果我像这样存储 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!");
});

这些 block 是否在同一个线程上执行?如果不是,我如何确保它们是?基本上我想保留对线程的引用并使其仅在该线程上执行一些操作。

最佳答案

如何将线程分配给队列是 Grand Central Dispatch 的一个实现细节。
分派(dispatch)到(串行或并发)队列的两个 block 不一定在同一个队列上执行
线。唯一的异常(exception)是仅在主线程上执行的“主队列”。

如果您确实要求代码在同一个线程上执行,那么您有
使用不同的线程方法,例如NSThreadpthread_create .

关于ios - 在 dispatch_queue_t 上调用执行是否确保它们在同一个线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562050/

相关文章:

iOS Location Manager 后台更新在 iOS 10 中停止

objective-c - iPad 对触摸的响应速度有多快?

java - 同步块(synchronized block)是否会触发数组的完整内存栅栏?

java - 如何将对象添加到 JPanel 中

ios - 如何从 objective-c 调用swift方法

objective-c - Objective C block - 语法

iphone - 使用 GCD 创建循环

ios - 仅更改空投部分底部的 UIActivityViewController 背景颜色

ios - 无法在 iTunes 连接上上传 iOS 应用程序屏幕截图

java - 如何同步添加元素和从队列中删除元素