iOS中的锁

2020-07-28  本文已影响0人  豆豆哥哥

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

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

读写锁

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

互斥锁 :

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

@synchronized (object)

有2个函数
A:objc_sync_enter
B:objc_sync_exit

若object == nil

@synchronized does noting

若object != nil

NSLock

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

NSRecursiveLock

递归锁
可以重入

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

条件锁 NSCondition - 信号

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

NSConditionLock
改变信号量

上一篇下一篇

猜你喜欢

热点阅读