代码改变世界

iOS Object-C 笔记(二)GCD

  jiayayao  阅读(70)  评论(0编辑  收藏  举报

    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提交一个栅栏函数,并立即返回。

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏