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