swift/OC中的死锁问题

先明确几个概念吧!

&3.2 同步与异步

串行与并行针对的是队列,而同步与异步,针对的则是线程。

最大的区别在于,同步线程要阻塞当前线程,必须要等待同步线程中的任务执行完,返回以后,才能继续执行下一任务;而异步线程则是不用等待。

&3.3 GCD API

GCD API很多,这里仅介绍本文用到的。

系统标准提供的两个队列

// 全局队列,一个特殊的并行队列dispatch_get_global_queue// 主队列,在主线程中运行,因为主线程只有一个,所以这是一个特殊的串行队列dispatch_get_main_queue复制代码

除此之外,还可以自己生成队列

// 从DISPATCH_QUEUE_SERIAL看出,这是串行队列dispatch_queue_create("com.demo.serialQueue", DISPATCH_QUEUE_SERIAL)// 同理,这是一个并行队列dispatch_queue_create("com.demo.concurrentQueue", DISPATCH_QUEUE_CONCURRENT)复制代码

同步与异步线程的创建:

dispatch_sync(..., ^(block))// 同步线程dispatch_async(..., ^(block))// 异步线程

案例与分析

案例一: 当同步遇到了串行

NSLog(@"1"); // 任务1

dispatch_sync(dispatch_get_main_queue(), ^{

    NSLog(@"2");// 任务2

});

NSLog(@"3"); // 任务3

摘自  https://juejin.im/post/5d6542f76fb9a06b32608319 

 

小结

简单来说就是,在串行队列里添加同步线程(任务),线程中有(task1),task2

敲黑板了!

同步任务会阻塞当前线程并且将任务task1添加到队列(串行)中.

此时队列中的顺序是:   同步线程   task2   task1 

此时就出现了,先有的蛋还是先有的鸡的问题!

 

转载于:https://www.cnblogs.com/bgj9308/p/11506447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值