当前位置:编程学习 > C#/ASP.NET >>

一个简单的C#线程安全问题

我的一个Asp.net(c#)程序中,为了性能考虑,我在数据访问层中把常用的数据表存放在一个公共静态变量中,如下: 
public static class DALGlobal

        public static DataSet GlobalDs; 
        public static DateTime LastUpdated; 
 ...


   但由于客户端的并发请求问题,程序就相当于在多线程环境下运行了。这样,如何来保证以上两个静态变量的线程安全性呢? 
 
我的数据访问层是一个静态类,其中全是静态方法。这种静态方法中,就有类似下面这样的代码:
... 
GlobalDs.Tables["AAA"].Rows[i][j] = value; 
... 
LastUpdated = DateTime.Now(); 
... 

我在网上问了下,有人回复说这样来处理:
定义一个静态的对象 static object lockObj 用来加锁 
lock(lockObj) 

... 
}
 
但我不明白为什么是另外定义一个对象来加锁,而不是直接给我要操作的静态变量加锁呢?我的静态类不存在实例化的问题,也要这样处理吗? --------------------编程问答-------------------- lock(lockObj) 

... 
}
这是常用的做法

如果直接使用你要操作的静态变量,那么读你的变量本身就要给你的变量加锁,这就死锁了 --------------------编程问答-------------------- 不错,谢谢楼上的回复! --------------------编程问答-------------------- 菜鸟学习中。。。 --------------------编程问答-------------------- 不是样的 因为lock(static object) static 生成的对象只有一个,每当访问资源时lockObj是唯一的,如果枷锁你的数据变量  如果 我给你dispose()了 不就出现异常了么? --------------------编程问答-------------------- 2楼的是常用方法
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,