5
难道emitting
变量是volatile吗? emit()
方法从不同的线程调用,并且发射必须可见。
但它仅在块中访问。 // ...
是工作完成的地方,但emitting
未在此处引用。是否需要volatile,以防止同步访问
因此,如果的结构已修复,那么对于emitting
还是不需要volatile
? (为什么?)
static final class C {
boolean emitting = false; // shall be volatile ?
public void emit() {
synchronized (this) {
if (emitting) {
return;
}
// ...
emitting = true;
}
// ...
synchronized (this) {
if (!condition()) {
emitting = false;
return;
}
}
// ...
}
弗兰克