代码之家  ›  专栏  ›  技术社区  ›  Jerod Venema

数据表并发锁定

  •  2
  • Jerod Venema  · 技术社区  · 14 年前

    我正在帮助修改一个应用程序,它充满了并发问题。我正试图对它们进行研究,并遇到了一个使用数据表的部分。

    数据表本身是静态的,跨多个线程共享。

    我知道使用dt.select(“…”)本身需要一个lock语句,否则在向数据表添加/删除行时会出现问题。但是,当该调用返回时,您有一个数据行对象数组。

    如果要更新这些行,我显然会锁定它们,但是如果我只是在读取它们,它们需要锁定吗?

    基本上,考虑到其他地方,我们正在添加新行并可能更新现有行,其中哪些是正确的:

    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
        }
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Brian Gideon    14 年前

    Select DataTable