Lin*_*gxi 4 terminology atomic
在我看来,术语read-modify-write没有多大意义,因为modify只是write 的另一种说法。引自维基百科(强调我的):
在计算机科学中,读-修改-写是一类原子操作[...],它可以同时读取内存位置和向其中写入新值[...]
那么为什么不简单地读写呢?两者之间有什么微妙的语义区别吗?
LWi*_*sey 10
为什么它被称为读-修改-写而不是读-写?
因为这正是典型架构上的事件序列,例如X86.
为了创建原子性的感知,缓存行在read和write操作之间被锁定。
例如,增加一个 C++ 原子变量:
g.fetch_add(1);
Run Code Online (Sandbox Code Playgroud)
被编译gcc成:
0x00000000004006c0 <+0>: lock addl $0x1,0x200978(%rip) # 0x601040 <g>
Run Code Online (Sandbox Code Playgroud)
尽管是一条指令,addl但它本身并不是原子的。该lock前缀必须保证更新的寄存器值写回高速缓存行,才可以通过其他核心被访问(存储缓冲区被刷新,但绕过RMW操作)。
的MESI高速缓存一致性协议可以确保所有内核观察对高速缓存线锁定后的更新的存储器值已被释放。这保证了所有线程都遵守 C++ 标准对 RMW 操作所需的修改顺序中的最新值。
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |