【发布时间】:2012-02-16 15:44:21
【问题描述】:
我的应用程序中有许多静态列表,用于存储数据库中的数据并在查找信息时使用:
public static IList<string> Names;
我还有一些方法可以从数据库中刷新这些数据:
public static void GetNames()
{
SQLEngine sql = new SQLEngine(ConnectionString);
lock (Names)
{
Names = sql.GetDataTable("SELECT * FROM Names").ToList<string>();
}
}
我最初没有设置 lock(),但是我偶尔注意到,请求线程无法在列表中找到信息。现在,我假设如果请求线程尝试访问 Names 列表,则在完全更新之前它无法访问。
这是 lock() 语句的正确方法和用法吗?
作为旁注,我在 MSDN 上注意到不应在公共变量上使用 lock()。有人可以详细说明我的特定情况吗?
【问题讨论】:
-
推荐的做法是使用单独的专用对象来锁定而不是 where 本身
标签: c# multithreading locking