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;
}
}
// ...
}
弗蘭克