【发布时间】:2010-12-14 16:34:15
【问题描述】:
什么时候应该使用锁?仅在修改数据或访问数据时?
public class Test {
static Dictionary<string, object> someList = new Dictionary<string, object>();
static object syncLock = new object();
public static object GetValue(string name) {
if (someList.ContainsKey(name)) {
return someList[name];
} else {
lock(syncLock) {
object someValue = GetValueFromSomeWhere(name);
someList.Add(name, someValue);
}
}
}
}
是否应该在整个块周围加一个锁,还是只将它添加到实际修改中就可以了?我的理解是,仍然可能存在一些竞争条件,其中一个呼叫可能没有找到它并开始添加它,而紧随其后的另一个呼叫也可能遇到相同的情况 - 但我不确定。锁定仍然如此混乱。我没有遇到上述类似代码的任何问题,但到目前为止我很幸运。上面的任何帮助以及如何/何时锁定对象的任何好的资源都会被应用。
【问题讨论】:
标签: c# multithreading