美文网首页
iOS开发 - NSLock与线程

iOS开发 - NSLock与线程

作者: 又系黎小明 | 来源:发表于2020-11-25 15:37 被阅读0次

最近买了一个单车锁,敲着敲着代码,突然灵光一闪!! 想起了 iOS中的锁机制!! (天呐。。什么鬼🥱)

平常在项目中用得最多的是信号量锁,其次是关键字锁@synchronized,但小弟不才,在Swift中还没搞清楚synchronized该怎么使用,因为它的效率最低,所以暂时忽略它呗😁
今天就来试验一下传说中最简单的对象锁NSLock。

1. 互斥锁
NSLock、NSRecursiveLock、pthread_mutex 都是属于互斥锁, 还有@synchronized也是互斥锁的一种

2. NSLock的死锁现象
NSLock的 lock() 与 unlock() 必须是成双成对的,有加锁便需要有解锁。 
若连续使用 lock() 便出现死锁现象。
(1)在Main线程死锁的话,程序直接卡死。

(1)主线程中死锁

(2) 若在子线程中死锁,并不会影响主线程

(2)子线程中死锁

(3) 同样在主线程中,使用try() 方法,可以有效避免死锁。
该方法会返回一个bool值,表示当前锁是否可用状态

(3)使用tryLock

3. NSLock与线程
锁只保证资源不被同时执行,但执行顺序是依靠线程控制。

线程控制执行顺序

当线程优先级同等时,执行顺序是不可控的

异步+同等优先级

接下来会继续试验其他锁,虽然用得的确比较少😂

小弟不才,若有错误之处,欢迎留言讨论(^_^)

相关文章

  • iOS开发 - NSLock与线程

    最近买了一个单车锁,敲着敲着代码,突然灵光一闪!! 想起了 iOS中的锁机制!! (天呐。。什么鬼?)平常在项目中...

  • iOS -锁-NSLock

    NSLock是iOS开发中最基础的锁。它继承自NSObject,遵守NSLocking协议。用于处理线程安全问题。...

  • iOS开发中常用的锁

    锁是线程编程同步工具的基础,在iOS开发中常用的锁有以下几种: @synchronized NSLock 对象锁 ...

  • IOS 保证线程同步方式&性能对比

    背景 IOS中保持线程同步的常用技术: @synchronized NSLock NSRecursiveLock ...

  • 线程锁

    iOS 多线程加锁有很多方式:@synchronized、 NSLock、NSRecursiveLock、NSCo...

  • iOS中的锁

    起底多线程同步锁(iOS) OSSpinLock NSLock NSRecursiveLock 同步 NSCond...

  • 线程锁

    iOS中有几种线程锁:@synchronized、NSLock以及NSRecursiveLock(递归锁)。本文用...

  • 细数iOS中的线程同步方案(二)

    细数iOS中的线程同步方案(一)细数iOS中的线程同步方案(二) NSLock 这个其实就是对pthread_mu...

  • Objective-C线程同步

    背景 目前iOS中保持线程同步的常用技术有: @synchronized NSLock NSRecursiveLo...

  • iOS底层探索之多线程(十七)——通过 Swift的Founda

    iOS 开发,各种锁你了解多少?NSLock、NSCondtion、NSRecursiveLock....... ...

网友评论

      本文标题:iOS开发 - NSLock与线程

      本文链接:https://www.haomeiwen.com/subject/iiggiktx.html