总结一下
同步和异步决定了要不要开启新的线程
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力
http://www.cocoachina.com/ios/20161031/17887.html
异步串行队列,异步并行队列,GCD异步顺序执行可以使用异步串行队列
线程依赖
http://blog.csdn.net/xgb742951920/article/details/52641133
//线程加锁
http://blog.csdn.net/likendsl/article/details/8568961
GCD是一个比较强大的线程处理机制,说白了也就是对队列的处理,GCD底层使用c语言编写,所以是面向过程的,对于不是专业从事c语言编程的人来说还是不好理解,但是没关系有我呢,
NSOpreation 是添加依赖
GCD 共有三种解决并发问题的方案,其中一个是增加信号量
dispatch_semaphone_signal是发送一个信号,自然会让信号总量加1,dispatch_semaphone_wait等待信号,当信号总量少于0的时候就会一直等待,否则可以正常执行,并让信号总量-1,根据这样的原理,我们便可以快速的创建一个并发控制来同步任务和有限资源访问控制
global_queue和concurrent_queue的区别
并发队列同样是使用dispatch_queue_create()方法创建,只是最后一个参数指定为DISPATCH_QUEUE_CONCURRENT进行创建,但是在实际开发中我们通常不会重新创建一个并发队列而是使用dispatch_get_global_queue()方法取得一个全局的并发队列(当然如果有多个并发队列可以使用前者创建)
参考:http://blog.csdn.net/fhbystudy/article/details/25918451
http://www.cnblogs.com/kenshincui/p/3983982.html
http://www.jianshu.com/p/04ca5470f212
@autoreleasepool {
//创建信号量
__blockdispatch_semaphore_t sem =dispatch_semaphore_create(0);
__blockdispatch_semaphore_t sem1 =dispatch_semaphore_create(0);
//创建一个队列
dispatch_queue_t queue =dispatch_queue_create("testBook",NULL);
//开启一个异步线程
dispatch_async(queue, ^{
for (int a=0; a<5; a++) {
NSLog(@"a = %d",a);
}
//发送信号量
dispatch_semaphore_signal(sem);
});
//接受信号量
dispatch_semaphore_wait(sem,DISPATCH_TIME_FOREVER);
dispatch_async(queue, ^{
for (int b=0; b<5; b++) {
NSLog(@"b = %d",b);
}
dispatch_semaphore_signal(sem1);
});
dispatch_semaphore_wait(sem1,DISPATCH_TIME_FOREVER);
dispatch_async(queue, ^{
for (int c=0; c<5; c++) {
NSLog(@"c = %d",c);
}
// dispatch_semaphore_signal(sem1);
});
}