Jac*_*cky 0 grand-central-dispatch ios
以下代码中的死锁.为什么?
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
dispatch_sync(queue, ^{
NSLog(@"Hello?");
});
});
Run Code Online (Sandbox Code Playgroud)
这是因为dispatch_sync阻塞主线程线程直到块完成运行.
所以它会永远等待,因为块应该运行的线程(主线程)被阻止.
该代码可以简化为
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Hello?");
});
Run Code Online (Sandbox Code Playgroud)
摘自" 并发编程指南"的最后一段
不要从传递给函数调用的同一队列上执行的任务调用dispatch_sync函数.这样做会使队列死锁.如果需要调度到当前队列,请使用dispatch_async函数异步执行此操作."
TL; DR
该代码尝试在被阻止的线程上运行代码块.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |