iOS中的锁

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

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

读写锁

写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与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中的锁)