Managed空间

彭刚的blog
随笔 - 26, 评论 - 153, 引用 - 81

导航

标签

每月存档

最新留言

广告

 

今天遇到了一个较有代表性的竟态条件。下面的代码(改编自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:暂无标签

留言反馈

#re:Quiz: 微妙的竟态条件(Race Condition) 编辑
Quiz: 微妙的竟态条件(Race Condition)ooeess
2005-06-16 13:39:00 | [匿名:气味检测仪]
#re:Quiz: 微妙的竟态条件(Race Condition) 编辑
Quiz: 微妙的竟态条件(Race Condition)ooeess
2005-06-16 13:37:00 | [匿名:一氧化碳测定仪]
#re:Quiz: 微妙的竟态条件(Race Condition) 编辑
^_~,pretty good!csharpsseeoo
2005-05-18 19:35:00 | [匿名:光谱仪]
#re:Quiz: 微妙的竟态条件(Race Condition) 编辑
^_^,Pretty Good!
2005-04-16 05:32:00 | [匿名:粘度计]
#re:Quiz: 微妙的竟态条件(Race Condition) 编辑
^_^,Pretty Good!
2005-04-10 20:11:00 | [匿名:气体计量计]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0