美文网首页
GCD 死锁

GCD 死锁

作者: 嘿_小小小 | 来源:发表于2018-08-03 17:40 被阅读8次

    GCD死锁

    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            dispatch_sync(dispatch_get_main_queue(), ^(void){
                NSLog(@"这里死锁了");
            });
        }
        return 0;
    }
    
    

    同步

    
    同步执行:
    比如这里的dispatch_sync,这个函数会把一个block加入到指定的队列中,而且会一直等到执行完blcok,这个函数才返回。因此在block执行完之前,调用dispatch_sync方法的线程是阻塞的。
    
    

    异步

    异步执行:一般使用dispatch_async,这个函数也会把一个block加入到指定的队列中,但是和同步执行不同的是,这个函数把block加入队列后不等block的执行就立刻返回了。
    
    

    串行

    串行队列:比如这里的dispatch_get_main_queue。这个队列中所有任
    务,一定按照先来后到的顺序执行。不仅如此,还可以保证在执行某个任务时,在它前面进入队列的所有任务肯定执行完了。对于每一个不同的串行队列,系统会为这个队列建立唯一的线程来执行代码。
    
    

    并发

    并发队列:比如使用dispatch_get_global_queue。这个队列中的任务也是按照先来后到的顺序开始执行,注意是开始,但是它们的执行结束时间是不确定的,取决于每个任务的耗时。对于n个并发队列,GCD不会创建对应的n个线程而是进行适当的优化。
    
    

    相关文章

      网友评论

          本文标题:GCD 死锁

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