Volatile不能保证原子性的原因及CAS在此基础上的优化操作
如i++操作,分为三步1.读取i到temp(临时变量存储i的值,在寄存器中)2.temp=temp+13.i=temp修改完成通知其他线程当两个线程(设i初值为5)都执行完2将要执行3,若其中一个线程先执行完,会发给另外其他线程通知i已被修改过,若i加了volatile,此时未执行完的那个线程会重新读取i,但不会再重复1,2操作,结果仍是6,这是volatile无法保证原子性操作的根源(对volatile变量的修改即写操作是由多个原子操作复合的,则无法再保证原子性,但可见性即收到通知后重新读取
原创
2022-01-20 18:46:27 ·
331 阅读 ·
0 评论