提升

ios--线程锁🔐

2020-01-09  本文已影响0人  简鱼7819

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实现

semaphore实现

二、NSLock实现

NSLock实现

三、@synchronized实现

@synchronized实现

四、pthread_mutex线程锁实现

pthread_mutex线程锁实现

注意:pthread_mutex宏初始化是需要ios10以上才能支持。

五、NSCondition实现

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

上一篇 下一篇

猜你喜欢

热点阅读