为了账号安全,请及时绑定邮箱和手机立即绑定

为什么CAS会没有线程上下文切换?

为什么CAS会没有线程上下文切换?

汪汪一只猫 2019-03-01 10:32:08
计算机给每个线程分配一个时间片,用完切换另一个线程,就算用cas不用锁,不是还要切换线程吗?为啥可以避免上下文切换开销呢?
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

不是说CAS没有线程上下文切换,只是减少了上下文切换。在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。而当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试(只要cpu分配给线程的时间片没有过,就可以不断的重试,但是时间片过后,如果还是没有成功,也会进行上下文切换,所以说只是减少了上下文切换)。

如果不对,请指正。

查看完整回答
1 反对 回复 2019-03-01
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

传统锁sync 或者Lock接口的LockSupport.park()这个底层基本上都是切换线程;
CAS是 compare and swap 什么意思?

while !CAS(j,0,1){
}
//其他代码

意思就是 当j为0的时候就替换为1,不成功就反复重试,这个时候就是一个线程内部死循环,不涉及线程切换

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 926 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号