int a;
volatile int b;
thread1{
a=3;
b=a;
}
thread2{
print(a,b)
}
问题一:老师,如果前提为一定是先执行了赋值线程也就是线程一然后在执行了输出线程,并且b输出时为3。这里可以保证a的值输出也为3是因为happens-before原则volatile 之前的都是可见的。如果这里b的赋值不依赖与a那么是否a的输出也会遵循happens-before原则一定会输出3呢?
问题二:问题一种如果依然遵循happens-before原则那么触发器是否就是这么实现的?背后是否可以理解为当线程最后使用了volatile变量纯赋值,那么线程之前所有的赋值不管是否是原子还是非原子操作,都已经完成了线程内存与主内存的同步。
问题三:如果前提为一定是先执行了赋值线程也就是线程一然后在执行了输出线程,但是不能保证b=a;这个的原子性但是可以保证可见性所以线程2一定可以输出a的值为3但是由于b=a;不是一个原子性操作所以不能保证b在线程2中输出为3.这样理解对吗?