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

block 使用注意事项

Block编程值得注意的那些事儿 一,前言   block 是在 iOS 4 中引入的新特性,它和 C++ 11 中的 lamba 表达式概念相似,有时候也被称为闭包。经过一段时间的使用,我...
  • shang_ri_la
  • shang_ri_la
  • 2014年06月17日 12:24
  • 5170

swift3.0 GCD DispatchSourceTimer注意事项

var count = 0;         var timer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.g...
  • chengkaizone
  • chengkaizone
  • 2016年10月24日 15:08
  • 3963

gcd使用block注意事项

1、block 在实现时就会对它引用到的它所在方法中定义的栈变量进行一次只读拷贝,然后在 block 块内使用该只读拷贝; 2、非内联(inline) block 不能直接访问 self,只能通过将...
  • qcx321
  • qcx321
  • 2016年08月13日 19:22
  • 411

gcd...

4270: 同源数 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 743  Solved: 99 Description 如果x和y的质因子集合完...
  • yellow_hzy
  • yellow_hzy
  • 2017年03月19日 22:44
  • 331

HDU-2504-又见GCD(Java强行暴力水过!)

又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...
  • qq_16542775
  • qq_16542775
  • 2015年05月02日 13:43
  • 770

GCDutil Tool

  • 2010年05月27日 10:43
  • 33KB
  • 下载

GCD注意事项(以后会逐步完善,)

1.GCD获取主队列即main_queue,同步串行执行(主队列是串行,即有顺序的执行任务),可能会造成死锁;最常见的就是,在某个方法中,同步串行等待方法结束执行穿行方法,然后这个方法又在等待穿行bl...
  • a787188834
  • a787188834
  • 2017年12月26日 09:36
  • 28

GCD使用注意事项

GCD给我们带了了使用线程方便的同时也埋下了隐患,用不好的话有可能出现死锁。   死锁发生的场景: 1. 使用同步函数dispatch_sync。 2. 使用同步函数的线程跟同步函数执行的bl...
  • SkyNullCode
  • SkyNullCode
  • 2015年11月20日 22:28
  • 1067

GCD使用注意事项

GCD给我们带了了使用线程方便的同时也埋下了隐患,用不好的话有可能出现死锁。   死锁发生的场景: 1. 使用同步函数dispatch_sync。 2. 使用同步函数的线程跟同步函数执行的bl...
  • SkyNullCode
  • SkyNullCode
  • 2015年11月20日 22:28
  • 1067

GCD的一些用法

GCD是Grand Central Dispatch 的缩写. 即多线程优化技术. 它可以提供线程安全的队列,串行队列和并行队列,同步和异步执行任务.在队列中, 有很多回调块的执行单位, 完成一个任...
  • yusky2008
  • yusky2008
  • 2015年05月03日 23:43
  • 1230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCD使用注意事项
举报原因:
原因补充:

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