码迷,mamicode.com
首页 > 编程语言 > 详细

多线程-GCD

时间:2015-08-03 22:33:49      阅读:181      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!