cpu的一种乱序执行
先执行if里面的内容, 再算if语句, 如果是false, 扔掉就好了
比如
public class SpeculativeLoadExample {
private boolean ready = false;
private int[] data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
public void writer() {
for (int i = 0; i < data.length; i++) {// 语句①(for循环语句)
data[i] =1;
}
ready = true;// 语句②
}
public int reader() {
int sum = 0;
int[] snapshot;
if (ready) {// 语句③(if语句)
for (int datum : data) {// 语句④(for循环语句)
sum += datum;// 语句⑤
}
}
return sum;
}
}
里面
if (ready) {// 语句③(if语句)
for (int datum : data) {// 语句④(for循环语句)
sum += datum;// 语句⑤
}
}
sum
可能会先算好(大不了ready是false不成立,就浪费一下白算)
如果是多线程执行, 一个线程执行writer, 另一个线程同时执行reader,
原来的目的是, write好了 把ready
改成 true 以后, reader才可以执行里面的sum求和,
但是 因为猜测执行, 先算了sum求和
这样reader就返回了一个不符合原本预期的sum
网友评论