//定义一个类,包含一个静态变量Count
public class Static_
{
     public static int Count;
}
第一个用户存储Count值,第二个用户也存储Count值,那么,当第一个用户存储Count=1时,第二个用户存储Count=2,这时第一个用户如果取Count值,就发生了变化,有什么办法可以解决他们存储的值是各自的,是否要用到线程或并发的知识?

解决方案 »

  1.   

    不要用静态变量.public class Static_
    {
         public int Count;
    }第一个用户
    Static_ User1 = new Static_();
    Static_ User2 = new Static_();
      

  2.   

    楼上的办法是可以,不过说不定搂主需要的确实是static 变量呢?
    一般这种情况就用mutex 来处理吧。保证读写操作的原子性。//创建一个 static 的mutex
            bool requestInitialOwnership = true;
            bool mutexWasCreated;        Mutex m = new Mutex(requestInitialOwnership, 
                                "MyMutex", 
                                out mutexWasCreated);public static int GetAndSetCount(int newCount)
    {
            m.WaitOne();
              if(newCount < 0) return Count; //only read the value
              else
              {
                int oldValue = Count;
                Count = newValue;
                return oldValue;
              }
            m.ReleaseMutex();
    }无论对哪个user 要访问 Count 值都应该通过这个方法,这样就能保证读写操作的
    原子性。
      

  3.   

    其实根据搂住的需求没有必要 用到static的字段,静态字段不属于单独的对象,而是属于其对应的类,在多线程操作中。net并没有提供同步机制,当多个线程都对一个类的静态字段操作的时候结果将不可预知,其实在不是必须的时候不用static能解决的就不必用
      

  4.   

    是这样的:
    我做的是Asp.Net的,具体是这样的:
    左边一个树菜单,右边是一个内容显示,
    当我选择左边的树菜单时,右边显示左边菜单项的编号
    我在一个类里面保存这个编号为Static的,
    当我运行2个次软件时,当第一个用户点树菜单的项时,第二个用户取出的值是第一个用户点取的值,而不是自己选择的,就是这个变量是全局的,我想让他们各自存储自己的选择的菜单项的值
      

  5.   

    用两个IFrame,然后?param=count可以么