内存模型
读写屏障太过接近硬件层面,让程序设计需要关注处理器的实现,为了避免程序设计中对底层细节的过多关注,诞生了内存模型的概念。内存模型是一种抽象的概念,用于描述程序中不同线程之间对内存操作的可见性和顺序性。它规定了存储器访问的行为
关系术语
- \(sequenced-before\):描述了单线程中两个操作的顺序关系,一个线程中若\(op_A\ sequence-before\ op_B\) ,则\(op_A\)的修改对\(op_B\)可见
- \(synchronizes-with\):描述了多线程下两个操作的顺序关系,若线程1某个\(op_A\),与线程2某个\(op_B\),满足\(op_A\ synchronizes-with\ op_B\),则\(op_A\)的修改对\(op_B\)可见,常见的利用锁等同步措施能够实现\(synchronizes-with\)关系
- \(happens-before\):单线程中的\(happens-before\)就是\(sequenced-before\),多线程中的\(happens-before\)就是\(synchronizes-with\)
Memory Order
typedef enum memory_order {
,
memory_order_relaxed,
memory_order_consume,
memory_order_acquire,
memory_order_release,
memory_order_acq_rel
memory_order_seq_cst} memory_order;