性能从高到低排序
- os_unfair_lock
- OSSpinLock 已不推荐使用
- pthread_mutex_t
- dispatch_semaphore_t
- NSLock
- NSCondition
- pthread_mutex_t(recursive)
- NSRecursiceLock
- NSConditonLock
- @synchroized
实际项目使用频次较高的是dispatch_semaphore_t, NSlock
追求效率更高的库一般会使用pthread_mutex_t, dispatch_semaphore_t
自旋锁和互斥锁对比
- 什么情况下使用自旋锁比较划算
- 自旋锁就是
不会睡觉, 不会休眠, 一直在处于忙等的状态
, 一直占用着cpu资源
预计线程等待锁的时间很短
加锁的代码(临界区)经常被调用, 而且竞争情况下很少发生
cpu资源不紧张的情况下
多核处理器
- 什么情况下使用互斥锁比较划算
- 互斥锁会进入休眠等待状态, 节省cpu资源, 当锁被释放时,才会被系统唤醒
预计线程等待锁的时间较长
临界区代码复杂逻辑复杂,循环量大,占用资源较大
临界区有IO等比较耗时的操作
临界区代码竞争非常激烈, 经常有多个线程会来抢占代码
单核处理器
网友评论