关于多线程操作DataTable锁的问题
炮子枪 2015-03-03 09:37:39 有三个线程:线程A、线程B、线程C,一个全局DataTable变量 DT,程序结构如下:
DataTable DT;
object Obj;
线程A 的代码
{
lock(this.Obj)
{
******对DT的各种增删改操作******
}
}
线程B 的代码
{
lock(this.Obj)
{
//foreach读取DT各行,做自己的操作
foreach(DataRow dr in DT.Rows)
{
......
}
}
}
线程C 的代码
{
lock(this.Obj)
{
//foreach读取DT各行,做自己的操作
foreach(DataRow dr in DT.Rows)
{
......
}
}
}
也就是线程A会在某情况下执行修改DT,线程B和线程C则顺序读取DT的行做自己的操作,现在程序加了lock了,在线程A修改DT的时候不执行线程B和线程C,但这个代码的问题是线程A如果没有执行的话,线程B和线程C也会互锁,影响效率啊。
怎么才能在线程A不执行的时候,线程B和线程C不要锁,提高效率?