美文网首页
iOS中的锁

iOS中的锁

作者: 豆豆哥哥 | 来源:发表于2020-07-28 22:19 被阅读0次

    锁 - 主要作用是保证多线程访问资源安全

    锁的种类:基本的锁就包括了三类 自旋锁 互斥锁 读写锁
    其他的比如条件锁,递归锁,信号量都是上层的封装和实现

    读写锁

    写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时
    既有读者又有写者。在读写锁保持期间也是抢占失效的
    读模式锁定时可以共享, 以写模式锁住时意味着独占, 所以读写锁又叫共享-独占锁

    互斥锁 :

    用于保证在任何时刻,都只能有一个线程访问该对象。 当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒
    互斥锁,分为递归锁和非递归锁。

    @synchronized (object)

    有2个函数
    A:objc_sync_enter
    B:objc_sync_exit

    若object == nil

    @synchronized does noting

    若object != nil

    • 递归锁 可以锁的重入
      在执行任务是 objc == nil 的时候 不会造成死锁
      1.存储节点
      2.哈希结构 - sync_list 表结构 1个个节点为 syncdate(data)
      3.递归锁
      总结:对互斥锁的一种形式的封装
      递归封装,里面是哈希表进行存储 --- 性能比较差
      好处是 只对object 锁1次,下次要锁的时候先查询有没有锁着有的话就不进行加锁了.

    NSLock

    不能递归的互斥锁的封装
    不能重入

    NSRecursiveLock

    递归锁
    可以重入

    普通线程 - 安全 - NSLock
    递归调用 NSRecursiveLock
    递归调用外面 还有循环的创建线程的,会照成死锁

    条件锁 NSCondition - 信号

    生成者消费者模式
    保证线程安全
    lock锁住
    unlock 解锁
    保证消费等待生成
    wait 等待
    signal 生成一个

    NSConditionLock
    改变信号量

    相关文章

      网友评论

          本文标题:iOS中的锁

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