ios--線程鎖🔐

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()末次!


參考鏈接

https://www.jianshu.com/p/7e9dd2cb78a8

https://www.jianshu.com/p/97ed78a6f9b8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章