cas

乐观锁 更多称为无锁化编程,比较并交换,使用cas时,本质上并不会去抢夺锁

处理器CAS指令(内存地址,旧值,新值):现代cpu在底层提供了cas的比较并且交换的指令,可以保证campare内存中变量值和旧值比较并且更新为新值这两步操作为原子操作

cas的问题:

    1,ABA问题-->用版本号来控制(ABA大部分应用不会影响)

    2,开销问题-->自旋时间过长,会给cpu造成较大负担

    3,只能保证一个共享变量的原子操作

cas的实现:

原子操作

要么全都执行,要么全不执行

加锁synchronized是原子操作,只有当锁里面的全部执行完成才能执行其他的(同一个锁),加锁其实是悲观锁,拿到锁之后,其他线程不论优先级多高都必须等待,锁比较重,效率比较低,处理不好会发生死锁

乐观锁

先做,做完再保证事情能够做成功

悲观锁

做操作之前,先把锁拿到手,再进行其他操作,类似于‘总有刁民想害朕’

最后修改于 2019-09-11 20:46:35
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇