• iOS ObjectC 笔记(二)GCD


        Objective-C GCD(Grand Central Dispatch)主要用于多线程编程。它屏蔽了繁琐的线程实现及管理细节,将其交由系统处理。开发者只需要定义block(封装为dispatch_continuation_t结构体),并提交到正确的dispatch_queue中。GCD包含dispatch queue和dispatch source.

        注意dispatch queue的死锁问题:

    1. dispatch_sync方法调用和block调用,是当前线程需要处理的两个任务;

    2. dispatch_sync方法调用首先提交到队列中;

    3. block调用提交到队尾,需要等待dispatch_sync方法调用完成;

    4. 而dispatch_sync方法调用,又需要block执行结束才能返回。这就形成了等待环,即死锁。

    解决死锁

        把block交由另一个线程执行。

    NSLog(@"1");
    dispatch_sync(notCurrentQueue, ^{
        NSLog(@"2");// block提交到另外一个线程队列
    });
    NSLog(@"3");

    dispatch_barrier_sync提交一个栅栏函数,等待它执行完毕;

    dispatch_barrier_async提交一个栅栏函数,并立即返回。

    本文来自博客园,作者:jiayayao,邮箱:jiayayao@126.com,转载请注明原文链接:https://www.cnblogs.com/jiayayao/p/15765007.html

  • 相关阅读:
    盘子序列
    最大矩形面积
    【模板】ST表
    排队
    map循环遍历
    vue循环遍历给div添加id
    正则 匹配
    字符串拼接
    js对象追加到数组里
    二级标题左侧加粗线条
  • 原文地址:https://www.cnblogs.com/jiayayao/p/15765007.html
Copyright © 2020-2023  润新知