GCD
NSOperation(NSNetWorking和圖片異步下載)
NSThread (常駐線程的實(shí)現(xiàn))
多線程與鎖(線程間同步和資源共享)
GCD
同步/異步 和 串行/并發(fā)
dispatch_barrier_async
dispatch_group
GCD 同步/異步 和 串行/并發(fā)
- 同步串行
死鎖,原因
另一個(gè)例子:
- 同步并發(fā)
答案:12345
- 異步串行
- 異步并發(fā)
dispath_barrier_async()
- 多讀單寫(xiě)怎么實(shí)現(xiàn)?
讀者和讀者并發(fā)
讀者和寫(xiě)者互斥
寫(xiě)者和寫(xiě)者互斥
異步柵欄調(diào)用
- dispatch_group
使用GDC實(shí)現(xiàn)需求ABC并發(fā),并發(fā)執(zhí)行完成后執(zhí)行任務(wù)D
- 創(chuàng)建并發(fā)隊(duì)列
- 創(chuàng)建一個(gè)group,執(zhí)行在一組中
- dispatch_group_notify
NSOPeration
特點(diǎn)
可以添加以來(lái)(GCD和NSThread沒(méi)有)
任務(wù)執(zhí)行狀態(tài)控制
設(shè)置并發(fā)量的控制執(zhí)行狀態(tài)控制
isReady
isExcusing
isFinished
isCancelled
如重寫(xiě)main方法,底層控制。
如重寫(xiě)start方法,我們自行控制狀態(tài)。
源碼分析
系統(tǒng)是通過(guò)KVO來(lái)移除一個(gè)isFinished=YES的NSOperation的
NSThread
啟動(dòng)流程
start -> 創(chuàng)建Pthread -> main() -> perforSelector (runloop) -> exict()
- start方法
創(chuàng)建函數(shù),在main函數(shù)中創(chuàng)建一個(gè)for循環(huán),實(shí)現(xiàn)一個(gè)常駐的線程
鎖
- @synchronized
- atomic
- NSSpinlock
- NSRecursiveLock
- NSLock
- dispatch_semaphore_t
- @synchronized
一半是使用單利對(duì)象使用的
atomic
修飾屬性和關(guān)鍵字
原子性對(duì)復(fù)制操作有現(xiàn)成安全性OSSpinLock自旋鎖
循環(huán)等待詢問(wèn),不釋放當(dāng)前資源
類似有個(gè)while循環(huán)
輕量級(jí)數(shù)據(jù)的訪問(wèn),簡(jiǎn)單的int值+1 -1操作,系統(tǒng)使用自旋鎖
- NSLock
上鎖和解鎖成對(duì)出現(xiàn)
沖入原因死鎖,換成遞歸鎖:
NSRecursiveLock
遞歸鎖dispatch_semaphore_t
信號(hào)量
dispatch_semaphore_creat
dispatch_semaphore_wait(信號(hào)量,時(shí)間)
dispatch_semaphore_signal(信號(hào)量)
多線程
怎么用GCD實(shí)現(xiàn)單讀多寫(xiě)?
幾種多線程計(jì)數(shù)的特點(diǎn)?
GCD簡(jiǎn)單的多線程,NSOparation的點(diǎn)在第三方中用,NSThread是實(shí)現(xiàn)一個(gè)常駐線程
NSOperation對(duì)象在FInished之后怎么存quene中移除掉的?(KVO)
你用過(guò)設(shè)么鎖?結(jié)合實(shí)際談?wù)勀阍趺词褂玫模?/p>