volatile 重排序问题

来源:3-1 数据库架构

慕少8424253

2019-05-14

volatile防止内存重排序是指的什么呢?
在线程A中:
context = loadContext();
inited = true;
在线程B中:
while(!inited ){ //根据线程A中对inited变量的修改决定是否使用context变量
sleep(100);
}
doSomethingwithconfig(context);
假设线程A中发生了指令重排序:
inited = true;
context = loadContext();
那么B中很可能就会拿到一个尚未初始化或尚未初始化完成的context,从而引发程序错误。

volatile是指插入内存屏障之后,volatile之前的代码不能排序到之后,volatile之后的代码不能排序到之前吗

写回答

3回答

慕尼黑001

2024-09-17

重排序问题指的是代码的实际执行顺序和编写的代码顺序不一致,写在后面的代码先执行,写在前面的代码后执行的情况。重排序发生在多核cpu的机器中,单核没有重排序的概念。重排序本质上是好的,可以优化代码执行速率,但是也会造成线程安全问题。
0
0

翔仔

2019-05-15

这里有一篇文章,比较通俗易懂

https://www.itcodemonkey.com/article/1725.html


0
0

翔仔

2019-05-15

同学好,如果你是inited为volatile,那么它能保证context = loadContext();先于inited = true;执行,只能保证线程间改动可见,但是不能保证线程之间的执行顺序

0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程