内存屏障的作用:
保障各个执行处理器的线程的可见性,有序性。
基本的内存存储屏障:
LoadLoad | 保证屏障前面的读先于屏障后面的读 (解决无效化队列问题) |
StoreStore | 保证屏障前面的写操作先于屏障后的写操作 (解决写缓冲器问题) |
LoadStore | 保证屏障前面的读操作先于屏障后面的读操作 (解决无效化队列问题) |
StoreLoad | 保证屏障前面的存储操作先于屏障后面的读操作 (二者都能够解决 开销最大) |
解决的原因:
LoadLoad | LoadLoad屏障清空了执行处理器的无效化队列,让状态更换为 I ,从而保障了执行处理器能够读取到其他执行处理器对数据的更新。 |
StoreStore | 每次更改,会将现有的写缓冲区中的条目标志一个状态,如果出现在执行写操作的时候发现缓冲池中有这样状态的标志,不管我们现在是否是 E,M状态都不会存储到高速缓存区当中。 |
StoreLoad | 屏障清空了执行处理器的无效化队列,让状态更换为 I ,从而保障了执行处理器能够读取到其他执行处理器对数据的更新。并且还会将写缓冲区中的数据刷新到高速缓存当中。 |