【发布时间】:2017-03-01 22:46:51
【问题描述】:
我了解了一些关于 GCD 障碍的知识,并想检查一下这些信息(来自 Apple docs):
在屏障块之后提交的任何块都不会在屏障块完成之前执行。
通过此代码:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
for (int i = 0; i < 500, i++) {
dispatch_async(queue, ^{
NSLog("%d", i);
}
if ((i % 50) == 0) {
dispatch_barrier_async(queue, ^{
for (int j = 0; j < 5; j++) {
[NSThread sleepForTimeInterval:1];
NSLog(@"Barrier!");
}
});
}
}
我预计每 50 次计数,队列将停止 5 秒,但事实并非如此。相反,屏障与其他任务并行执行,并且所有尽管有屏障的任务都会立即执行。文档是错的还是我误解了什么?提前致谢
【问题讨论】:
-
如果您使用
queue = dispatch_queue_create("SomeName", DISPATCH_QUEUE_CONCURRENT);创建队列会发生什么?
标签: ios objective-c grand-central-dispatch