今天遇到了一个较有代表性的竟态条件。下面的代码(改编自Net类库中的代码)缓存比较昂贵的计算结果。为了节省空间,所以的信息全部储存在一个变量中:
class DataCache{
bool CheckSwitch1() { // expensive calculation }
bool CheckSwitch2() { // expensive calculation }
[Flags] enum SwitchFlags {
Switch1Ready = 0x01, Switch2Ready = 0x02, Switch1On = 0x04, Switch2On = 0x08
}
SwitchFlags dataFlag = 0;
bool IsSwitch1On() {
if ((dataFlag & SwitchFlags.Switch1Ready) == 0) {
SwitchFlags tmp = SwitchFlags.Switch1Ready;
if(CheckSwitch1()) tmp |= SwitchFlags.Switch1On;
dataFlag |= tmp;
return (tmp & SwitchFlags.Switch1On) != 0;
}
return (dataFlag & SwitchFlags.Switch1On) != 0;
}
bool IsSwitch2On() {
if ((dataFlag & SwitchFlags.Switch2Ready) == 0) {
SwitchFlags tmp = SwitchFlags.Switch2Ready;
if(CheckSwitch2()) tmp |= SwitchFlags.Switch2On;
dataFlag |= tmp;
return (tmp & SwitchFlags.Switch2On) != 0;
}
return (dataFlag & SwitchFlags.Switch2On) != 0;
}
}
请问在什么情况下会出错?
打印 | 张贴于 2004-08-14 12:54:00 | Tag:暂无标签
留言反馈