ios 線程同步,解決多線程修改數組等問題 – iPhone手機開發 iPhone軟體開發教學課程

ios 線程同步,解決多線程修改數組等問題。在iOS開發中,支持多種同步方法,我們從耗時角度出發,評估各種同步對象的性能。

@synchronized

NSLock

NSCondition

NSConditionLock

NSRecursiveLock

pthread_mutex_t

OSSpinLock

dispatch_barrier_async

耗時方面:

OSSpinlock耗時最少;

pthread_mutex其次。

NSLock/NSCondition/NSRecursiveLock 耗時接近,220ms上下居中。

NSConditionLock最差,我們常用synchronized倒數第二。

dispatch_barrier_async也許,性能並不像我們想象中的那麼好.推測與線程同步調度開銷有關。單獨block耗時在1ms以下基本上可以忽略不計的。

在訪問次數比較多的情況下,IMP訪問耗時要比消息發送略小。 參看 NSLock 與 NSLock + IMP 對比。

為什麼不直接使用 IMP 而使用直接聲明函數指針的方式? XCode6下IMP不能指定參數,報錯如下

如何解決呢?修改LLVM預處理設置即可。

如果隻是粗略的使用鎖,不考慮性能問題可以使用synchronized。

如果對效率有較高的要求,還是采用OSSpinlock比較好。

因為Pthread的鎖在也是用 OSSpinlock 實現的。OSSpinlock 的實現過程中,並沒有進入系統kernel,使用OSSpinlock可以節省系統調用和上下文切換。

發佈留言