美文网首页
iOS GCD中遇到的线程锁死

iOS GCD中遇到的线程锁死

作者: 温柔vs先生 | 来源:发表于2017-08-08 17:03 被阅读0次

    先上代码

     - (void)viewDidLoad {
        [super viewDidLoad];
        NSLog(@"%@",[NSThread currentThread]);
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"sync----%@",[NSThread currentThread]);
        });
        NSLog(@"%@",[NSThread currentThread]);
    }
    

    控制台输出

    我们可以看到控制台只打印输出了第一个log,第二和第三个log为什么没有走进来呢?这是因为当前线程为主线程,而主线程默认都是串行队列(串行队列都是先进先出,一步一步执行的),当你用gcd创建一个同步任务时,并没有开辟一个子线程所以只有当gcd的同步块走完以后才会走第三个log输出,而当他走gcd的同步任务时,此任务又让回到主线程执行任务(dispatch_get_main_queue),主线程又是串行的 所以只有当主线程执行完成以后才会走block里面的任务,从而出现了主线程让gcd先走,而gcd又让主线程先走导致冲突,引起了主线程的锁死。

    相关文章

      网友评论

          本文标题:iOS GCD中遇到的线程锁死

          本文链接:https://www.haomeiwen.com/subject/mdatrxtx.html