偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

iOS開發(fā)——多線程同步

移動(dòng)開發(fā) iOS
Hi,今天跟大家聊聊iOS開發(fā)中多線程同步的話題。說到多線程同步,各位童鞋可能立刻會(huì)想到NSLock、NSCondtion甚至OSSpinLock等等各種線程鎖。但是,今天我們不談線程鎖,各位如果對(duì)Lock有興趣,可以看看這篇文章,既然不談線程鎖,那說啥?當(dāng)然是說多線程同步

[[141566]]

Hi,今天跟大家聊聊iOS開發(fā)中多線程同步的話題。說到多線程同步,各位童鞋可能立刻會(huì)想到NSLock、NSCondtion甚至OSSpinLock等等各種線程鎖。但是,今天我們不談線程鎖,各位如果對(duì)Lock有興趣,可以看看這篇文章,既然不談線程鎖,那說啥?當(dāng)然是說多線程同步

線程同步不等于線程鎖。要解決同步問題,首先需要了解為什么需要線程同步,線程不同步主要原因在于多個(gè)線程可能同時(shí)操作某個(gè)對(duì)象從而導(dǎo)致狀態(tài)不一致的問題。是不是可以這么理解,如果多線程不會(huì)同一時(shí)刻訪問對(duì)象就解決了同步問題。如何做到這一點(diǎn)?可以采用串行隊(duì)列的思想,何為串行隊(duì)列?可以簡(jiǎn)單理解為所有操作都必須按順序依次執(zhí)行。主線程就是串行隊(duì)列,最簡(jiǎn)單的同步方式就是把同步操作放到主線程執(zhí)行,然并卵,當(dāng)我沒說

既然不能在主線程執(zhí)行,放到子線程不就OK?創(chuàng)建子線程的方式有很多,不累述,有興趣的童鞋可以各顯神通

GCD同步

GCD可能是創(chuàng)建子線程最簡(jiǎn)單的方式之一,關(guān)于GCD,這篇文章做了比較詳細(xì)的介紹,不再進(jìn)一步描述。既然要實(shí)現(xiàn)線程同步,首先需要?jiǎng)?chuàng)建串行隊(duì)列

  1. _queue = dispatch_queue_create("com.olinone.synchronize.serialQueue", NULL); 
  2. dispatch_queue_t dQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); 
  3. dispatch_set_target_queue(_queue, dQueue); 

然后,將所有同步事件依次加入隊(duì)列中即可確保多線程同步

  1. dispatch_async(_queue, ^{ 
  2. block(); 
  3. }); 

NSOperationQueue同步

通過GCD的方式即可滿足絕大多數(shù)需求,但是也難免有個(gè)別特殊需求,比如操作的取消。此時(shí),NSOperationQueue將是不錯(cuò)的選擇

NSOperationQueue雖然是并發(fā)多線程池,但是巧妙的設(shè)計(jì)也可以讓其實(shí)現(xiàn)串行隊(duì)列的功能。當(dāng)maxConcurrentOperationCount=1的時(shí)候,同一時(shí)刻只有一個(gè)NSOperation被執(zhí)行,NSOperationQueue就由并發(fā)執(zhí)行變成串行執(zhí)行

  1. NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; 
  2. operationQueue.maxConcurrentOperationCount = 1

實(shí)現(xiàn)方式與GCD一樣,依次將同步操作加入到線程池中即可實(shí)現(xiàn)同步操作的串行執(zhí)行

  1. - (void)execSyncBlock:(void (^)())block { 
  2. if (NSOperationQueue.currentQueue == self) { 
  3. block(); 
  4. else { 
  5. NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:block]; 
  6. [self addOperations:@[operation] waitUntilFinished:YES]; 

HJSynchronizeDemo詳細(xì)展示了實(shí)際使用方式。巧妙的利用串行隊(duì)列可以帶來意想不到的效果。除了解決多線程同步,還能夠處理串行式大計(jì)算等業(yè)務(wù),比如圖片渲染,音頻處理等等

PS:本公司最近正在尋求高端iOS開發(fā)工程師,有興趣的童鞋可以找我內(nèi)推!薪資福利大大的有,阿里股票拿到手軟,更有曉松和宋柯兩位老師帶你齊飛,還可以一睹花塵的真容,還不速速行動(dòng)起來!點(diǎn)贊可以忘記,內(nèi)推啥的一定不要忘記我!

責(zé)任編輯:chenqingxiang 來源: 龐海礁的個(gè)人空間
相關(guān)推薦

2015-07-22 09:39:38

IOS多線程同步

2013-07-16 12:13:27

iOS多線程多線程概念GCD

2010-01-21 11:27:30

linux多線程機(jī)制線程同步

2011-08-18 17:07:23

IOS開發(fā)多線程NSInvocatio

2009-03-24 08:56:23

數(shù)據(jù)同步多線程Java

2011-07-20 10:50:19

蘋果 OpenCL 多線程

2024-02-27 10:44:58

C#線程后端

2009-09-14 19:39:14

批量線程同步

2010-01-21 11:23:49

Linux多線程同步消息隊(duì)列

2011-08-02 10:26:59

iOS 多線程 線程

2010-03-15 19:37:00

Java多線程同步

2010-01-21 11:22:35

Linux多線程同步

2011-04-14 13:27:53

Synchronize多線程

2013-07-16 10:12:14

iOS多線程多線程概念多線程入門

2016-04-12 09:48:24

nsthread多線程ios

2014-07-21 10:03:56

2019-06-06 15:49:53

多線程iOS開發(fā)操作

2024-07-05 08:32:36

2011-06-22 13:47:16

Java多線程

2011-06-22 13:57:54

Java多線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)