内存屏障
CPU优化手段:运行时指令重排序
为什么会出现指令重排序
当CPU写缓存时发现区块正被其他CPU占用,为了提高CPU处理性能,可能将后面的读缓存命令优先执行
指令重排原则
重排需要遵循as-if-serial...CPU下单线程自己执行的情况下保证结果是正确的,如果是多核多线程,指令逻辑无法分辨因果关联,可能会出现乱序,导致程序运行结果出现错误
内存屏障
定义
是一类同步屏障指令,它使得CPU或编译器在对内存进行操作的时候...,严格按照一定的顺序来执行, 也就是说在memory barrier之前的指令和memory barrier之后的指令不会由于系统优化等原因而导致乱序
内存屏障指令
写内存屏障,在指令后插入Store...Barrier,能让写入缓存中最新的数据更新写入主内存,让其他线程可见.强制写入主内存,这种显示调用,CPU就不会因为性能考虑而去对指令重排
读内存屏障,在指令前插入Load Barrier,可以让高速缓存中的数据失效...,强制从新主内存中加载数据读取主内存内容,让CPU缓存与主内存保持一致,避免缓存导致的一致性问题
完全内存屏障,保障了早于屏障的内存读写操作的结果提交到内存之后,再执行晚于屏障的读写操作
作用
就是解决上述