鉴于以下课程:
class?Foo?{
public?volatile?int?number;
public?int?method1()?{
int?ret?=?number?=?1;
return?ret;
}
public?int?method2()?{
int?ret?=?number?=?2;
return?ret;
}
}
Run Code Online (Sandbox Code Playgroud)
并且在同一个实例上调用多个线程method1()并method2()同时执行Foo,对method1()的调用是否可以返回除1以外的任何内容?
我试着理解为什么这个例子是一个正确同步的程序:
a - volatile
Thread1:
x=a
Thread2:
a=5
Run Code Online (Sandbox Code Playgroud)
因为存在冲突的访问(存在对a的写入和读取)所以在每个顺序一致性执行中必须发生 - 在该访问之间的关系之前.假设一个顺序执行:
1. x=a
2. a=5
Run Code Online (Sandbox Code Playgroud)
1发生在2之前,为什么?