我能查到的,原子操作的作用有两点:
1.保证操作要么执行完成,要么未执行,不会出现中间状态
2.保证读取的是内存上的最新值,而非缓存在寄存器上的值
众所周知,32 位及以上的机器对内存的读/写操作的最小单位是 32bit ,也就是说对一个 int32 进行读写,本身即可满足第一条要求。
至于第二条,可以分两种情况:
1. 如果不采用其他方如 mutex 来保证读取操作发生在写入操作后,那么读取操作本身就既可能读到新值也可能读到旧值,因此不在意读的是内存还是寄存器
2. 如果用了 mutex ,那么 mutex 可以保证读操作在写操作后,因此读到的值必然是已经被修改过的值,而非缓存值
因此,可否认为在 32 位及以上的机器上使用 atomic 包来单纯的读/写 int32 毫无意义,只有 cas 操作由于涉及到一次读和一次写才有用处?
1.保证操作要么执行完成,要么未执行,不会出现中间状态
2.保证读取的是内存上的最新值,而非缓存在寄存器上的值
众所周知,32 位及以上的机器对内存的读/写操作的最小单位是 32bit ,也就是说对一个 int32 进行读写,本身即可满足第一条要求。
至于第二条,可以分两种情况:
1. 如果不采用其他方如 mutex 来保证读取操作发生在写入操作后,那么读取操作本身就既可能读到新值也可能读到旧值,因此不在意读的是内存还是寄存器
2. 如果用了 mutex ,那么 mutex 可以保证读操作在写操作后,因此读到的值必然是已经被修改过的值,而非缓存值
因此,可否认为在 32 位及以上的机器上使用 atomic 包来单纯的读/写 int32 毫无意义,只有 cas 操作由于涉及到一次读和一次写才有用处?