美文网首页
关于GCD死锁的一些理解

关于GCD死锁的一些理解

作者: biny_ios | 来源:发表于2018-10-30 09:48 被阅读5次

    项目中基本上线程方面用的都是GCD,不经意间也许就会有死锁的产生。
    死锁的产生是由于队列的堵塞造成的

    产生死锁的四个必要条件:
    1.互斥条件。指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只有一个进程占用.如果有其它进程请求资源,请求者只能等待,直到占有资源的进程释放完毕。
    2.请求和保持条件。指进程已经保持至少一个资源,但又提出新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的资源保持不放。
    3.不可剥夺条件。指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
    4.环路等待条件。造成的循环资源请求的进程链,造成了互相等待。
    
    eg 
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"1");
        });
        NSLog(@"2");
    }
    同步线程会造成死锁,一直不会打印,运行会直接报错。
    最常见的死锁就是`同步函数`+`主队列`造成的队列阻塞
    

    相关文章

      网友评论

          本文标题:关于GCD死锁的一些理解

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