iOS下常用锁了解

作者: 永远保持一颗进取心 | 来源:发表于2019-02-28 22:21 被阅读37次

    @synchronized

    关于 @synchonized(){} 的使用官方文档解释得非常清楚。可以总结为以下几点:

    • 给指令所做的事情与其他互斥锁一样
    • @synchronized(){} 圆括号内的 OC 对象作为 Token 来标识一个锁。如果在不同位置 @synchronized 的圆括号传入相同的 OC 对象,可以认为是同一个锁,否则是不同的锁
    • 该指令内部有做异常捕获,在捕获处释放锁,这样做会有额外的性能消耗。如果不需要可以直接使用 NSLock 来替代。

    atomic

    这是一个属性修饰符,保证多线程环境下,对所修饰的变量的读取是线程安全的,但是会影响存取的效率。

    NSLock

    简单的互斥锁,不可重入,重入会导致死锁。

    OSSpinLock

    自旋锁:循环等待访问,不释放当前资源。
    应用场景:用于轻量级的数据访问。

    自旋锁已经不在安全,可以拜读 ibireme 大神的文章:不再安全的 OSSpinLock.

    NSRecursiveLock

    递归锁,解决简单互斥锁线程重入导致死锁的问题,可以在循环语句或者递归方法中应用

    dispatch_semaphore_t

    信号量,可以看本人写的关于 dispatch_semaphore_t 文章

    相关文章

      网友评论

        本文标题:iOS下常用锁了解

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