锁带来的问题
- 会造成线程挂起
- 会造成线程调度开销
- 如果一个线程死锁会造成其它都不能执行
硬件并发锁
现在的CPU提供了一些诸如测试并设置,比较并交换这样的原子操作指令,为我们的乐观锁提供了支持。
比较并交换 CAS
int oldvalue = v;
if(v == expertedValue) v = newValue;
return oldvalue;
通常的用法是,取出v然后进行一定的操作,通过CAS会写值。如:
public int increment(){
int v;
do{
v = cas.getValue();
}while(v != cas.compareAndSwap(v, v+1));
return v + 1;
JVM的支持
Java提供了一些原子类,能够把其中的方法改为硬件底层的锁机制, 如果不能则会使用自旋锁的方式,来完成这个功能。
ABA问题
http://hustpawpaw.blog.163.com/blog/static/184228324201210811243127/
本文探讨了锁在并发编程中可能引发的问题,如线程挂起及调度开销,并介绍了现代CPU提供的原子操作如何支持乐观锁实现。同时,文中还讨论了Java虚拟机如何利用这些特性实现原子类,并涉及到了CAS操作可能导致的ABA问题。
5274

被折叠的 条评论
为什么被折叠?



