ios多线程学习之GCD线程锁

因为在以前的开发中实在是很少会用到多线程的知识,但是现在手中的项目是做视频开发。

而在视频开发类项目中,最困难的就是逻辑和多线程处理,这几天没事研究了一下线程锁,我觉的一个简答的代码实例,就能体现出

GCD 线程锁的特征


还是先了解一点,在GCD 中实现锁的操作是通过线程队列来实现的


首先是一段没有锁操作的简单线程处理

   

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        

        while (bstart)

        {

                

                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{


                for (NSInteger i=0; i<50; i++)

                {

                    

                    NSLog(@"%ld",(long)i);

                }

             

                  });

            usleep(100*1000);

        }

        

    });


可以观察这一段代码的输出结果数字并不一定是从0。。。50

而是在中间可能会乱序。

因为我是在while循环中开了一个线程,然后在下次循环的时候又开了一个线程,这样两个线程都在执行输出,这样就会分不清时序,导致线程混乱


下面是加入对列队的线程


    dispatch_queue_t queue =dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);

  

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        

        while (bstart) {

            

                dispatch_async(queue, ^{

            


                for (NSInteger i=0; i<50; i++)

                {

                    

                    NSLog(@"%ld",(long)i);

                }

                


            });


            usleep(100*1000);

        }

        

    });

    

观察这个输处,由于所有while 循环开的线程都是队列线程,难么就会按队列先后顺序执行,这样的打印输出就全部是0。。。50;




你可能感兴趣的:(iOS,多线程)