内存操作的非原子性
一个内存操作是非原子的,因为:
- 它由多条指令组成
- 可能是因为它要操作一个很大的数据结构
- 可能是编译器决定的
- 它由一条非原子的指令组成
- RMW类型的指令
- 没有内存对齐的存取操作
RMW类型
RMW(Read-Modify-Write)指令是一类计算机指令,它结合了读取、修改和写入操作,通常用于并发编程和多线程环境中。RMW指令允许原子性地读取共享内存中的值,对其进行修改,并将修改后的结果写回内存
常见的RMW指令包括:
- Compare-and-Swap,CAS:比较并交换指令,在执行期间,它会比较内存位置的值与一个预期值,如果相等,则将新值写入该内存位置,否则不做任何操作
- Fetch-and-Add:获取并加法指令,它从内存中读取值,并将一个常数添加到该数值上,然后将结果写回内存。它通常用于实现计数器或者在多线程环境下实现原子自增操作
- Test-and-Set:测试并设置指令,它将内存位置的值设置为一个特定的标记位,并返回原始状态,它常用于实现互斥锁,通过原子操作将锁定状态设置为已锁定或未锁定