CAS有3个 *** 作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
这些方法类似compareAndSwapXXX,这些 *** 作是一个原子 *** 作,也就是说cpu在执行cas时对这一块内存是独占排他的。在并发包中很多 *** 作真正执行的也是cas,并发包中的类并发性能比使用 synchronized 关键字好也在于此:锁的粒度小了许多并且少了线程上下文切换。
C++源码分享:
compareAndSwapObject (jobject obj, jlong offset,jobject expect, jobject update)
{
jobject *addr = (jobject*)((char *) obj + offset);
return compareAndSwap (addr, expect, update);
}
系列内容:
Java多线程.线程状态
Java多线程.Volatile,transient,Monitor,goto
Java多线程.Unsafe
Java多线程.三种实现方式
Java多线程.ReentrantLock
Java多线程.Synchronized
Java多线程.LockSupport
Java多线程.线程检测
Java多线程.CAS
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)