扫码关注官方订阅号
线程A的1和线程B和4并不满足happen before原则, 为什么要保证1和4的可见性呢?而且即使通过禁止volatile读和普通变量读/写的重排序, 那由于1和4不满足happen before原则, 也可能出现4先执行1后执行的情况, 导致1的修改对于4来说不可见呀? 那么增强volatile的语义有什么用呢?
ringa_lee
//线程1:context = loadContext(); //语句1inited = true; //语句2
//线程2:while(!inited ){ sleep()}doSomethingwithconfig(context);
这里inited为volatile变量,如果非volatile变量和volatile之间可以重排,那么线程2执行的时候可能context还没有初始化。你不要把volatile放到非...变量前来使用,volatile保证他之前的语句一定执行完了,所以如果inited为true的话,context是一定被初始化了的。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
//线程1:
context = loadContext(); //语句1
inited = true; //语句2
//线程2:
while(!inited ){
sleep()
}
doSomethingwithconfig(context);
这里inited为volatile变量,如果非volatile变量和volatile之间可以重排,那么线程2执行的时候可能context还没有初始化。你不要把volatile放到非...变量前来使用,volatile保证他之前的语句一定执行完了,所以如果inited为true的话,context是一定被初始化了的。