多线程GCD的理解

串行队列或者并发队列都会遵循FIFO(先进先出)的原则

- (void)test
{
    NSLog(@"Start");
    
    dispatch_sync(dispatch_get_main_queue(), ^{
      
    });
}
上述代码是典型的死锁案例

执行顺序是先执行Start,然后将block和主队列传给GCD的
dispatch_sync函数等待执行,直到它返回.

由于主队列属于串行队列,先进先出,不能并发执行,当前只能执行一个任务, test函数作为一个
待执行的任务添加在主队列,dispatch_sync函数携带的block任务被添加到test后面,需要等待
test执行结束后才能执行,而dispatch_sync函数特性是等待block执行完毕后返回(同步阻塞当
前线程),而dispatch_sync不返回,test函数也无往下进行,就出现了相互等待的现象,即死锁。

不定期更新中…

你可能感兴趣的:(多线程GCD的理解)