一个简单的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#