我刚读了一个问题这里,读了@ just给我的最有评价的答案,我感到很困惑.根据答案,在以下代码中,
private int a=0;
public void foo(){
int temp=35;
a=28;
a=temp;
}a=28;是一个原子操作。
在我在Stackoverflow中看到的其他一些问答中,信息是不同的,它说a=28;是而不是--一个原子操作,因为首先应该对正确的操作进行读操作,然后进行写操作,这两个操作中的每一个都是原子操作,但是整个分配不是(老实说,我认为它是这样工作的)。
那么a=temp;呢?它在原子性方面与a=28;有什么不同吗?
顺便说一句,我知道双倍和长的易失性需要使它们读/写成原子,只是对我上面写的东西感到困惑。
能请人详细说明一下吗?
谢谢..
发布于 2017-03-20 21:35:10
根据正式文件
读和写对于引用变量和大多数原始变量(除了长和双)都是原子的。
因为a=28;是对一个基元的写,它不是长的或双倍的,所以它是原子的。
但是,a=temp并不是原子的,因为它由两个独立的操作组成--从temp读取和对int的写入。每一个都是原子的,但不是它们的组成。
https://stackoverflow.com/questions/42914267
复制相似问题