最近在看原子操作的原理,得知是通过 Lock 指令保证了内存读写原子性,其原理是
对此我产生了几个问题:
|      1Jooooooooo      2021-01-14 11:40:28 +08:00 MESI 我理解保证的是 L1, L2 cache 上的一致性吧, 对于 cpu 寄存器中的值不保证. | 
|  |      2Orlion OP @Jooooooooo lock 与寄存器无关 | 
|  |      3yzbythesea      2021-01-14 13:07:06 +08:00 Lock 是一个 prefix,就是指定接下来的 instruction 一定是原子操作的。Lock 只能和极少数指令一起使用,通常是 read-modify-write,比如 INCL(i),就是 i = i + 1 。在 Lock 指令执行的时候,CPU 对于这个 cache line 有绝对控制权,不会共享给其他 CPU 。你不用 Lock,CPU 不会保证该 cache line 只有他能用。 | 
|  |      4Orlion OP @yzbythesea CPU 操作 L3 cache 上同一个 cacheline 同一位置数据,不加 Lock 就不是原子的,这样理解吗?如果不加 Lock 也是原子的,那 CPU 没必要锁吧 | 
|  |      5yzbythesea      2021-01-14 13:42:50 +08:00 via iPhone 是啊 cache 都是 CPU 共享的 除非你是单核 | 
|  |      6yzbythesea      2021-01-14 13:43:37 +08:00 via iPhone 这个要看你是什么操作 比如 读,肯定是原子啊,所以 Lock 不能用于这个指令 | 
|  |      7Orlion OP @yzbythesea 感谢提醒,突然意识到了 |