zoukankan      html  css  js  c++  java
  • 关于GCD中同步函数+主队列产生死锁的一点理解

    首先看个产生死锁的代码
    -(void)syncMain{

    //获得主队列
    dispatch_queue_t queue = dispatch_get_main_queue();

    NSLog(@"start");
    //同步函数
    dispatch_sync(queue, ^{
    NSLog(@"------ %@",[NSThread currentThread]);
    });
    NSLog(@"end");
    }
    上述代码中是不会执行到 NSLog(@”end”) 将 end 打印出来的, 当然,再开一条线程来执行syncMain是不会产生死锁

    原因解释

    同步函数与主队列的特点

    同步函数 dispatch_sync : 立刻执行,并且必须等这个函数执行完才能往下执行
    主队列特点:凡是放到主队列中的任务,都会放到主线程中执行..如果主队列发现当前主线程有任务在执行,那么主队列会暂停调度队列中的任务,直到主线程空闲为止
    综合同步函数与主队列各自的特点,不难发现为何会产生死锁的现象,主线程在执行同步函数的时候主队列也暂停调度任务,而同步函数没有执行完就没法往下执行…简陋的解决办法,上文提到.要么不这么用.

  • 相关阅读:
    python读写excel等数据文件方法
    学习记录2
    NLP、ML/DL等基础概念
    修改代码的艺术-读后感
    Python读取文本文件数、excel文件数据
    学习记录1
    数据分析平台
    Pycharm搜索关键词的快捷键
    程序员的自我修养阅读笔记三
    第十周学习
  • 原文地址:https://www.cnblogs.com/dashengios/p/10403675.html
Copyright © 2011-2022 走看看