首页 > 编程语言 > 详细

多线程-GCD

时间:2015-08-03 22:30:31      阅读:238      评论:0      收藏:0      [点我收藏+]

1、定义:GCD的基本思想就是将 操作O 放到 队列S 中去执行

 

2、队列(dispatch_queue_t)

  a、串行队列(顺序执行)

    dispatch_queue_t q = dispatch_queue_create("xian chen id", DISPATCH_QUEUE_SERIAL);

  b、并行队列(并发执行)

    dispatch_queue_t q = dispatch_queue_create("xian chen id", DISPATCH_QUEUE_CONCURRENT);

3、操作

  a、dispatch_async 异步操作

    dispatch_async(q, ^{NSLog(@" 异步:%@", [NSThread currentThread])});

  b、dispatch_sync 同步操作

    dispatch_sync(q, ^{NSLog(@"同步:%@", [NSThread currentThread])});

4、全局队列 (异步操作会产生新的线程;同步不会新建线程,在主线程顺序操作)

  dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

5、主队列 (每个应用程序对应唯一的一个主队列,在多线程开发中,主队列用以更新UI)

  dispatch_queue_t q = dispatch_get_main_queue();

6、死锁情况:

 // 全局队列,都在主线程上执行,不会死锁

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 并行队列,都在主线程上执行,不会死锁
dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", DISPATCH_QUEUE_CONCURRENT);
// 串行队列,会死锁,但是会执行嵌套同步操作之前的代码
dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", DISPATCH_QUEUE_SERIAL);
// 直接死锁
dispatch_queue_t q = dispatch_get_main_queue();

dispatch_sync(q, ^{
    NSLog(@"同步任务 %@", [NSThread currentThread]);
    dispatch_sync(q, ^{
        NSLog(@"同步任务 %@", [NSThread currentThread]);
    });
}); 
技术分享
技术分享

多线程-GCD

原文:http://www.cnblogs.com/jianghong/p/4700391.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!