社区
Java SE
帖子详情
关于自旋锁的两个问题
zhangbh0000
2021-02-19 03:59:12
1. 自旋锁 spin lock 许多博客说不释放cpu,那么lock 怎么被释放?如果一直在while 循环里面,其他线程怎么抢占cpu?
2. 有的博客说不会导致cpu 上下文切换, 从用户态到内核态。我理解相同的进程不需要切换用户态和内核态。这个是怎么避免其他的进程抢占cpu,做上下文切换?
...全文
216
2
打赏
收藏
关于自旋锁的两个问题
1. 自旋锁 spin lock 许多博客说不释放cpu,那么lock 怎么被释放?如果一直在while 循环里面,其他线程怎么抢占cpu? 2. 有的博客说不会导致cpu 上下文切换, 从用户态到内核态。我理解相同的进程不需要切换用户态和内核态。这个是怎么避免其他的进程抢占cpu,做上下文切换?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangbh0000
2021-02-28
打赏
举报
回复
感谢解惑,最近又看了下,发现的确自旋锁是要求多cpu的
rumlee
2021-02-22
打赏
举报
回复
自旋锁是不释放cpu,至于其他线程如何抢占cpu,使用自旋锁得有2个以上的cpu,其他线程使用的另外的cpu 自旋锁只能适用于等待锁时间非常短的情况下,cpu切换的时间和等待锁的时间相比,cpu切换时间无法忽略不计的情况下,否则没有意义还不如用互斥信号量。
自旋锁
的优缺点?
自旋锁
不会引起调用者休眠,如果
自旋锁
已经被别的线程保持,调用者就一直循环在那里看是否该自旋 锁的保持者释放了锁。由于
自旋锁
不会引起调用者休眠,所以
自旋锁
的效率远高于互斥锁。 虽然
自旋锁
效率比互斥锁高,但它会存在下面
两个
问题
: 1、
自旋锁
一直占用CPU,在未获得锁的情况 下,一直运行,如果不能在很短的时间内获得锁,会导致CPU效率降低。 2、试图递归地获得
自旋锁
会 引起死锁。递归程序决不能在持有
自旋锁
时调用它自己,也决不能在递归调用时试图获得相同的自旋 锁。 由此可见,我们要慎重的使用
锁9---
自旋锁
VS 适应性
自旋锁
锁—
自旋锁
VS 适应性
自旋锁
************ 如有侵权请提示删除 *************** 文章目录锁---
自旋锁
VS 适应性
自旋锁
自旋锁
1、概念:2、提出背景3、
自旋锁
的原理4、
自旋锁
的优缺点5、
自旋锁
开启自适应
自旋锁
总结
自旋锁
1、概念: 当一个线程尝试去获取某一把锁的时候,如果这个锁此时已经被别人获取(占用),那么此线程就无法获取到这把锁,该线程将会等待,间隔一段时间后会再次尝试获取。这种采用循环加锁 -> 等待的机制被称为
自旋锁
(spinlock) 2、提出背景
自旋锁
与适应性
自旋锁
自旋锁
与适应性
自旋锁
概念引入
自旋锁
与非
自旋锁
流程图
自旋锁
的缺陷
自旋锁
的实现原理自适应
自旋锁
概念引入 在介绍
自旋锁
之前,我们需要介绍一些前提知识来帮助大家理解
自旋锁
的概念。 阻塞或唤醒一个Java进程,需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间。如果同步代码块中的内容过于简单,状态转换花费的时间有可能比用户代码执行的时间还长。 在许多场景中,同步资源的锁定时间很短,为了这一小...
Linux线程(十二)线程互斥锁-
自旋锁
与读写锁详解
自旋锁
与互斥锁很相似,从本质上说也是一把锁,在访问共享资源之前对
自旋锁
进行上锁,在访问完成后释放
自旋锁
(解锁);事实上,从实现方式上来说,互斥锁是基于
自旋锁
来实现的,所以
自旋锁
相较于互斥锁更加底层。如果在获取
自旋锁
时,
自旋锁
处于未锁定状态,那么将立即获得锁(对
自旋锁
上锁);如果在获取
自旋锁
时,
自旋锁
已经处于锁定状态了,那么获取锁操作将会在原地“自旋”,直到该
自旋锁
的持有者释放了锁。由此介绍可知,
自旋锁
与互斥锁相似,但是互斥锁在无法获取到锁时会让线程陷入阻塞等待状态;
非
自旋锁
VS
自旋锁
和适应性
自旋锁
1、什么是自旋 所谓自旋,就是指当有另外一个线程来竞争锁时,这个线程会在原地循环等待,而不是把该线程给阻塞,直到那个获得锁的线程释放锁之后,这个线程就可以马上获得锁的。锁在原地循环的时候,是会消耗cpu的,就相当于在执行一个啥也没有的for循环。 自旋其实就是在当前这个线程获取同步资源锁失败的时候,该线程会在原地一直等待锁释放,不会把该线程阻塞,只要获得锁的那个线程释放锁之后,这个等待的线程马上就可以去获得锁。原地循环等待会占用处理器时间的,类似在执行一个空的for循环一样。 2、非
自旋锁
非
自旋锁
尝试获取
Java SE
62,630
社区成员
307,264
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章