自旋锁与互斥量
来源:互联网 发布:调查问卷统计分析软件 编辑:程序博客网 时间:2024/05/01 23:24
互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。
两种锁适用于不同场景:
如果是多核处理器,如果预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的。
如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建议使用互斥量。
如果是单核处理器,一般建议不要使用自旋锁。因为,在同一时间只有一个线程是处在运行状态,那如果运行线程发现无法获取锁,只能等待解锁,但因为自身不挂起,所以那个获取到锁的线程没有办法进入运行状态,只能等到运行线程把操作系统分给它的时间片用完,才能有机会被调度。这种情况下使用自旋锁的代价很高。
如果加锁的代码经常被调用,但竞争情况很少发生时,应该优先考虑使用自旋锁,自旋锁的开销比较小,互斥量的开销较大。
0 0
- 自旋锁与互斥量
- 信号量与自旋锁(5): 自旋锁
- 互斥锁,自旋锁与自适应自旋锁
- 互斥锁,自旋锁与自适应自旋锁
- 自旋锁与互斥量的选择
- 自旋锁与信号量
- 自旋锁与信号量
- 信号量与自旋锁
- 信号量与自旋锁
- 自旋锁与信号量
- 信号量与自旋锁
- 信号量与自旋锁
- 信号量与自旋锁
- 自旋锁与互斥锁
- 信号量与自旋锁
- 自旋锁与信号量
- 自旋锁与信号量
- 自旋锁与互斥锁
- 倒计时CountDownTimer
- 为什么说程序=算法+数据结构!
- 只创建在堆上生成的变量详解
- Android 内存优化方面资料
- 1052. Linked List Sorting (25)
- 自旋锁与互斥量
- mybatis注解详解
- 随笔
- 算法竞赛入门经典(第2版)习题1-6详解
- centos 温度监控软件
- 对Handler机制的回答
- 博弈论 —— 海盗分金
- 015.ViewRoot和DecorView
- 获取android系统中已安装程序的信息