本文为大家介绍volatile关键字的作用之一不让编译器优化(c volatile关键字的作用),下面和小编一起看看详细内容吧。
volatile 通常用于java 并发编程,以保持内存可见性并防止指令重新排序。内存可见性(memory visibility):所有线程都能看到共享内存的最新状态;防止指令重排:在基于偏序关系的happens-before内存模型中,指令重排技术极大地提高了程序执行效率,但也引入了一些问题。
volatile 有维护内存可见性的特殊规则:读取、加载和使用操作必须连续发生;分配、存储和写入操作必须连续发生;每次读取前必须从主存中刷新最新值;立即同步回主内存。
也就是说,被volatile关键字修饰的变量,随时看到它的最新值。线程1 中变量v 的最新修改对线程2 可见。
volatile防止指令重排策略:在每个volatile写操作前插入一个storestore屏障;在每次易失性写入操作后插入一个storeload 屏障;在每个易失性读取操作之后插入一个loadload 屏障;在每个易失性读取操作之后插入一个loadload 屏障;在易失性读取操作之后插入一个loadstore 屏障。
注意:这样的指令重排序问题只发生在happens-before 内存模型中。
好了,volatile关键字的作用之一不让编译器优化(c volatile关键字的作用)的介绍到这里就结束了,想知道更多相关资料可以收藏我们的网站。