Mat*_*oal 7 objective-c grand-central-dispatch ios
我对这段代码的行为有些怀疑:
dispatch_async(queue, ^{
sleep(2);
NSLog(@"step1");
dispatch_sync(queue, ^{
sleep(3);
NSLog(@"step 2");
});
NSLog(@"step 3");
});
Run Code Online (Sandbox Code Playgroud)
从这些行我希望得到输出,step1 -> step3 -> step2但我只获得step1.
如果我用dispatch_async更改dispatch_sync它按预期工作,dispatch_sync是否会调度dispatch_async创建这种问题?
答案后编辑----------------
这种情况造成了死锁:
您可以查看已接受的答案以获得有关此情况的说明,并查看此链接以获取文档http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_async.3.html
mat*_*way 21
那是一个僵局.
在完成阻止并返回之前,dispatch_sync呼叫将一直等到queue可用,但是在dispatch_async完成之前它将无法使用,因此只会坐在那里等待呼叫dispatch_sync.
| 归档时间: |
|
| 查看次数: |
4395 次 |
| 最近记录: |