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的机器中,单核没有重排序的概念。重排序本质上是好的,可以优化代码执行速率,但是也会造成线程安全问题。00 -
翔仔
2019-05-15
00 -
翔仔
2019-05-15
同学好,如果你是inited为volatile,那么它能保证context = loadContext();先于inited = true;执行,只能保证线程间改动可见,但是不能保证线程之间的执行顺序
00
相似问题