并发编程基石之内存屏障
屏障类型 | 指令实例 | 说明 | 意义 |
---|---|---|---|
LoadLoad Barriers | Load1; LoadLoad; Load2 | 确保 Load1 数据的装载优先于 Load2 及所有后续装载指令的装载 | 保证数据的一致性(防止重排序导致数据执行错误) |
StoreStore Barriers | Store1; StoreStore; Store2 | 确保 Store1 数据对其他处理器可见(刷新到内存)先于 Store2 及所有后续存储指令的存储 | 确保 Store2 准确获取 Store1 的结果,保证数据正确 |
LoadStore Barriers | Load1; LoadStore; Store2 | 确保 Load1 数据装载先于 Store2 及所有后续存储指令刷新到内存 | 在Store2 的执行运行前,可获取到 Load1 最新数据,保证数据可见性 |
StoreLoad Barriers | Store1; StoreLoad; Load2 | 确保 Store1 数据对其他处理器可见(刷新到内存)先于 Load2 及所有后续装载指令的装载。StoreLoad Barriers 会使该屏障之前的所有内存访问指令(存储和装载指令)完成后,才执行该屏障之后的内存访问指令 | 保证该屏障后面的操作最后执行(与前面内存屏障进行比较) |