private static int A;
public static int GetA2(int a)
{
    A = a;
    return A*A;
}

解决方案 »

  1.   

    这个方法的实例开销应该不大,没必要用成static 你把字段private static int A;
    去掉静态试试
      

  2.   

    静态变量相当于一个程序域的全局变量,只有唯一的一份实例,当多个线程对这样的变量进行操作的时候使用lock以确保当前只能有一个线程在对其进行工作,其他线程将会等待直到该静态变量被lock释放,如果不对其进行lock操作,那么多个线程对静态变量进行抢占操作将可能会引起异常.
    就像茅坑一次只足够让一个人进去,使用者在使用前要锁门防止另一个人进入,如果你不锁门,别人别人憋不住了非要和你挤,那么结果......不知道......
      

  3.   

    临界区其实就是对象监视器
    因为多线程的运行是无序的
    如:线程1进入方法,运行A=a;,但还没有运行return A*A;
    CPU时间片被抢占,另一个线程进入运行,传入了新的a值,因为是静态的
    所以第二个线程对A值的更改会影响第一个线程,造成返回值错误,而实例不会发生这种问题如果有必要的话,对这个数做同步吧,或者不要缓存A,除非共享的变量,最好不要用静态,同步影响性能,同步方法很多,比如lock,mutex等,单增变量还一个呢
      

  4.   

    可以用三种方法来加锁mutex , lock , monitor,其中lock最简单,如下:
    private static int A;
    public static int GetA2(int a)
    {
       lock(this)
       {
        A = a;
        return A*A;
       }
    }
      

  5.   

    在高负载(每秒处理请求达1000)的asp.net应用程序中,对于类的属性成员,是不是静态的还不如实例的???对于只使用局部变量的成员方法,到底受不受多线程的影响??
    谢谢各位。