Volatile如何保证有序性(禁止指令重排)
1、首先我们要了解计算机在执行程序时,为了提高性能,编译器和处理器一般都会对指令做重排,一般分为以下三种:
单线程环境里面确保程序最终执行的结果和代码顺序执行的结果一致。
处理器在进行指令重排时必须要考虑指令之间的数据依赖性。
多线程环境中线程交替执行,由于编译器优化重排的存在,两个或多个线程中使用的变量能否保证一致是不能确定的,最后执行的结果也是无法预测的。
2、volatile实现禁止指令重排优化,从而避免在多线程环境下程序出现乱排序执行的现象。
内存屏障,也称为内存栅栏,他是一个cpu的指令。作用有两个:
一是保证特定操作的执行顺序;
二是保证某些变量的内存可见性(volatile的内存可见性是利用该特性实现的)
3、由于编译器和处理器都能执行指令重排优化,如果在指令之间插入一条内存屏障则会告诉编译器和cup不管在任何情况下,无论任何指令都不能和这条内存屏障进行指令重排,也就是说通过插入内存屏障禁止在内存屏障前后的指令执行重排序优化。内存屏障的另外一个作用就是强制刷出各种CPU的缓存数据,因此在任何CPU上的线程都能读取到这些数据的最新值。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧