GCD NSOperationQueue线程依赖

总结一下

同步和异步决定了要不要开启新的线程

同步:在当前线程中执行任务,不具备开启新线程的能力

异步:在新的线程中执行任务,具备开启新线程的能力



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);

            });

        }


你可能感兴趣的:(GCD NSOperationQueue线程依赖)