GCD使用注意事项

原创 2015年11月20日 22:28:50
GCD使用注意事项

        想必大家对GCD的概念都比较的熟悉,网上一搜一大堆,这里就不详细介绍了。
        今天主要探讨一下GCD使用时候的一些注意事项,用不好的话有可能出现死锁。
        死锁发生的场景:

 1. 使用同步函数dispatch_sync。
 2. 使用同步函数的线程跟同步函数执行的block线程为同一线程。

        死锁原因:

 1. 同步函数会阻塞当前线程,直到block执行完成。
 2. block线程被阻塞,block一直无法执行

        如下的代码片段就会发生死锁,程序运行只会输出:Before Block,然后程序卡住,无限的风火轮转起来。

- (void)testGCDDeadLock {
    dispatch_queue_t queue = dispatch_get_current_queue();
    NSLog(@"Before Block");
    dispatch_sync(queue, ^{
       NSLog(@"In Block");
    });
    NSLog(@"After Block");
}

        上面的代码片段只是为了方便测试,才使用了dispatch_get_current_queue函数,该函数在OSX10.9之后就被废弃,并且该函数不好操作,用不好会出现意想不到的后果。

        GCD给我们带了了使用线程方便的同时也埋下了隐患,因此在使用GCD相关的sync函数时,要特别的注意不能让执行block的线程为当前的线程。

        转载请注明出处:http://blog.csdn.net/skynullcode

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS中GCD的使用小结

最近想要深入研究GCD所以找了一些关于GCD 的文章和大家分享一下 本文转载自:http://www.jianshu.com/p/ae786a4cf3b1 本篇博客共分以下几个模块...

分割器使用注意事项

  • 2014-05-22 20:56
  • 31KB
  • 下载

Java中可变长参数的使用及注意事项

在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,例如print("hello");print("hello","l...

多重背景使用注意事项

  • 2014-12-17 17:12
  • 98KB
  • 下载

TEC1401.Report开发技术总结 - 第五章 使用Oracle Reports开发报表-在EBS应用中注册Report的注意事项(4/4)

第一章    在EBS应用中注册Report的注意事项 1.      文本模式报表 在Oracle Applications可以输出的报表有两种模式:文本和图形. 输出格式分别为:文本...

DM642使用注意事项

  • 2017-04-17 12:59
  • 230KB
  • 下载

CFC功能库使用注意事项

  • 2013-05-01 09:02
  • 900KB
  • 下载

IOS 使用支付宝的注意事项

下载官方sdk要注意很多东西,首先要确认你的软件是调用支付宝的什么支付方式,目前,我所知的有调用支付宝,支付宝钱包,支付宝网页,支付宝快捷支付,每种使用方式的代码和逻辑都不太一样,使用时要注意。这里简...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)