美文网首页
iOS开发多线程同步

iOS开发多线程同步

作者: 庞海礁的个人空间 | 来源:发表于2015-07-17 09:35 被阅读266次

转载请注明出处:http://www.olinone.com/

Hi,今天跟大家聊聊iOS开发中多线程同步的话题。说到多线程同步,各位童鞋可能立刻会想到NSLock、NSCondtion甚至OSSpinLock等等各种线程锁。但是,今天我们不谈线程锁,各位如果对Lock有兴趣,可以看看这篇文章,既然不谈线程锁,那说啥?当然是说多线程同步

线程同步不等于线程锁。要解决同步问题,首先需要了解为什么需要线程同步,线程不同步主要原因在于多个线程可能同时操作某个对象从而导致状态不一致的问题。是不是可以这么理解,如果多线程不会同一时刻访问对象就解决了同步问题。如何做到这一点?可以采用串行队列的思想,何为串行队列?可以简单理解为所有操作都必须按顺序依次执行。主线程就是串行队列,最简单的同步方式就是把同步操作放到主线程执行,然并卵,当我没说

既然不能在主线程执行,放到子线程不就OK?创建子线程的方式有很多,不累述,有兴趣的童鞋可以各显神通

GCD同步

GCD可能是创建子线程最简单的方式之一,关于GCD,这篇文章做了比较详细的介绍,不再进一步描述。既然要实现线程同步,首先需要创建串行队列

_queue=dispatch_queue_create("com.olinone.synchronize.serialQueue",NULL);

dispatch_queue_tdQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);

dispatch_set_target_queue(_queue,dQueue);

然后,将所有同步事件依次加入队列中即可确保多线程同步

dispatch_async(_queue,^{

block();

});

NSOperationQueue同步

通过GCD的方式即可满足绝大多数需求,但是也难免有个别特殊需求,比如操作的取消。此时,NSOperationQueue将是不错的选择

NSOperationQueue虽然是并发多线程池,但是巧妙的设计也可以让其实现串行队列的功能。当maxConcurrentOperationCount=1的时候,同一时刻只有一个NSOperation被执行,NSOperationQueue就由并发执行变成串行执行

NSOperationQueue*operationQueue=[[NSOperationQueuealloc]init];

operationQueue.maxConcurrentOperationCount=1;

实现方式与GCD一样,依次将同步操作加入到线程池中即可实现同步操作的串行执行

-(void)execSyncBlock:(void(^)())block{

if(NSOperationQueue.currentQueue==self){

block();

}else{

NSBlockOperation*operation=[NSBlockOperationblockOperationWithBlock:block];

[selfaddOperations:@[operation]waitUntilFinished:YES];

}

}

HJSynchronizeDemo详细展示了实际使用方式。巧妙的利用串行队列可以带来意想不到的效果。除了解决多线程同步,还能够处理串行式大计算等业务,比如图片渲染,音频处理等等

PS:本公司最近正在寻求高端iOS开发工程师,有兴趣的童鞋可以找我内推!薪资福利大大的有,阿里股票拿到手软,更有晓松和宋柯两位老师带你齐飞,还可以一睹花尘的真容,还不速速行动起来!点赞可以忘记,内推啥的一定不要忘记我!

相关文章

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • 起底多线程同步锁(iOS)

    起底多线程同步锁(iOS) 起底多线程同步锁(iOS)

  • 线程锁

    探讨iOS开发中各种锁使用NSCondition实现多线程同步 NSCondition是线程同步, 阻塞线程。 取...

  • iOS开发中的多线程

    iOS开发中的多线程 pthread,NSThread,NSOpertion,GCD的区别 同步和异步,并发和串行...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • iOS复习之多线程

    关于iOS多线程,你看我就够了iOS多线程--彻底学会多线程使用dispatch_group来进行线程同步 iOS...

  • iOS开发之多线程(5)—— Pthreads

    文集 iOS开发之多线程(1)—— 概述iOS开发之多线程(2)—— ThreadiOS开发之多线程(3)—— G...

网友评论

      本文标题:iOS开发多线程同步

      本文链接:https://www.haomeiwen.com/subject/dgcpqttx.html