多线程-GCD
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]);
});
});
浙公网安备 33010602011771号