抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

CAS(Compare And Swap)

CAS是一种乐观锁。何谓悲观,编译器认为就是如果不严格同步线程调用则一定会产生异常,所以悲观锁会阻塞其他所有线程调用(互斥)。

但是并不是所有操作都一定会产生异常,如多线程的读操作就不会。

CAS机制

在多线程对共享资源访问时比较共享资源当前的状态(newValue)和发起调用时的状态(oldValue)。如果状态一样则还没其他线程访问,这个线程(swap)改变共享资源的状态并访问,结束后再换会原来的状态;如果状态不一样则说明已被其他线程占用,进入自旋等待时机尝试再次访问。

为了保证比较过程是安全的,CAS的compare操作必须的原子操作,所以开销是比切换到内核态调用mutex再切换会用户态是小很多的。

评论