我正在帮助修饰一个应用程序,它充满了并发问题。我正在尝试解决它们,并遇到了使用 DataTables 的部分。
数据表本身是静态的,在许多线程之间共享。
我知道使用 dt.Select("...") 本身需要一个 lock 语句,否则在向数据表添加/删除行时会遇到问题。但是,当该调用返回时,您将拥有一个 DataRow 对象数组。
如果我要更新它们,我显然会锁定这些行,但如果我只是在阅读它们,它们是否需要锁定?
基本上,鉴于在其他地方我们正在添加新行并可能更新现有行,以下哪些是正确的:
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
}
foreach(DataRow dr in rows)
{
// read statements only
}
或者
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
foreach(DataRow dr in rows)
{
// read statements only
}
}