何時應該使用鎖?只有在修改數據或訪問它時?僅在修改vs整個方法時鎖定
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);
}
}
}
}
是否應該在整個塊周圍鎖定,或者只是將其添加到實際修改中?我的理解是,仍然會有一些競爭條件,一個呼叫可能沒有找到並開始添加,而另一個呼叫可能也遇到同樣的情況 - 但我不確定。鎖定仍然非常混亂。我還沒有遇到上述類似代碼的任何問題,但我可能只是幸運的。上面的任何幫助都將被appriciated以及任何好的資源如何/何時鎖定對象。
大鏈接,所有可用的鎖定機制。我只聽說過'lock'。 – MyNameIsJob 2010-12-14 17:35:06
祝你好運 - 如果你能掌握這些東西,你將成爲少數幾個爲多核開發做好準備的開發人員。 – 2010-12-14 17:36:34