关于原子类的问题
来源:7-4 本章总结_

宝慕林5249423
2019-12-30
老师讲什么是原子类时说:
1,不可分割;
2,一个操作是不可中断的,即便是多线程的情况下也可以保证;
但是cpu调度是按时间片来运行的,不同的时间片会运行不同的代码,怎么理解不可分割和不可中断的概念呢?我有点不理解,老师能否解释一下,谢谢!
写回答
1回答
-
原子性分为两个层面,一个是微观层面,一个是宏观层面。
微观层面就是CPU指令不可分割,比如说一个CAS指令,它内部虽然有多个操作,但是由CPU可以保证这个指令的原子性。
第2个是宏观层面,宏观层面例如加了synchronized锁之后,就具备原子性,虽然在一个同步方法中有很多条语句,也肯定不是在同一个时间片内完成的,在执行期间呢,也肯定会被中断、被调度,但是无论怎么调度,都不可能出现执行到一半就退出的情景,也就是说,虽然我执行到一半,然后暂时被调度走了,但是我知道我还没有执行完毕,过一会还会继续回来执行我这个任务,尤其是,在此期间其他线程不能拿到这把锁来破坏我的原子性。
虽然原子类没有用锁,但是CAS的原子性保证了原子类的加操作具备原子性。
212019-12-31
相似问题