ios中能用做線程鎖的很多,也有很多人梳理解釋過。我自己再梳理寫一遍代碼~
方式
OSSpinLock 、dispatch_semaphore 、os_unfair_lock 、spthread_mutex
NSLock 、pthread_mutex(recursive)、NSRecursiveLock 、NSConditionLock
@synchronized
其中NSLock和@synchronized是開發中經常遇到使用的。其他的dispatch_semaphore是之前梳理GCD又學習到的,至於剩下的表示見過沒有寫過。
借用一位作者的舉例,他的一系列GCD讓我很有受益。奔跑吧小螞蟻
舉例:兩個火車票銷售窗口 共同銷售車站總共的50張車票
一、GCD的dispatch_semaphore實現線程鎖
以上是售賣火車票的代碼
semaphore實現
二、NSLock實現
三、@synchronized實現
四、pthread_mutex線程鎖實現
注意:pthread_mutex宏初始化是需要ios10以上才能支持。
五、NSCondition實現
NSCondition和NSConditionLock實現一樣,只是類不一樣。
其他的就不一一列舉了。
六、總結
1,實現線程鎖的方式多種多樣;
2,鎖也分多種:自旋鎖、互斥鎖、條件鎖、遞歸鎖。其中pthread_mutex是典型的互斥鎖,@synchronized()是遞歸鎖,NSCondition是條件鎖,NSLock是互斥鎖,dispatch_semaphore是信號量能實現線程鎖的功能
3,NSLock是對pthread_mutex的進一步對象封裝,NSRecursiveLock和NSConditionLock也一樣,都是對pthread_mutex各類模式進一步封裝。
4,以上列舉的線程鎖性能排列:dispatch_semaphore最高,NSLock次之,NSCondition再次之,@synchronized()末次!
參考鏈接