内存屏障的分类
硬件层提供了一系列的内存屏障 来提供一致性的能力。
1. lfence,是一种读屏障。在读指令前插入读屏障,可以让高速缓存中的数据失效,重新从主内存加载数据
2. sfence, 是一种写屏障。在写指令之后插入写屏障,能让写入缓存的最新数据写回到主内存
3. mfence, 是一种全能型的屏障,具备了lfence和sfence的能力
SFENCE,LFENCE,MFENCE指令提供了高效的方式来保证读写内存的排序,这种操作发生在产生弱排序数据的程序和读取这个数据的程序之间。
SFENCE——串行化发生在SFENCE指令之前的写操作但是不影响读操作。
LFENCE——串行化发生在LFENCE指令之前的读操作但是不影响写操作。
MFENCE——串行化发生在MFENCE指令之前的读写操作。
即:
sfence:在sfence指令前的写操作当必须在sfence指令后的写操作前完成。
lfence:在lfence指令前的读操作当必须在lfence指令后的读操作前完成。
mfence:在mfence指令前的读写操作当必须在mfence指令后的读写操作前完成。
SFENCE,LFENCE,MFENCE指令提供了比CPUID指令更灵活有效的控制内存排序的方式。