请教一个Lock语法问题.
我定义了一个DataTable.多线程访问这个DataTable.会报错,我查询了一下,推荐在操作DataTable之前,用Lock锁住DataTable.
public static DataTable dt= new DataTable();
然后我在多个线程中,是这样操作的
lock(dt)
{
...........
}
请家这样的用法对吗,我查看了一下,Lock是锁不住pbulic的变量的,请教各位,有没有更好的方法互斥访问DataTable.
------解决方案--------------------object syncLock = new Object();
访问DataTable的线程中
Lock(syncLock)
{
// ...
}
------解决方案--------------------Lock是锁不住pbulic的变量的
从来没有听过这个说法,应该是其他原因
查了下错误信息,貌似是lock里面更新了dt的信息?
可以考虑另外加锁,别锁dt了。
public static object lockthis = new object ();都行
------解决方案--------------------锁改变dt的操作
dt操作函数()
{
lock(this)
{
操作行为
}
}
------解决方案--------------------通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。 常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:
如果实例可以被公共访问,将出现 lock (this) 问题。
如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。
由于进程中使用同一字符串的任何其他代码都将共享同一个锁,所以出现 lock("myLock") 问题。
最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。
class Account
{
decimal balance;
private Object thisLock = new Object();
public void Withdraw(decimal amount)
{
lock (thisLock)
{
if (amount > balance)
{