我們在工作中討論了鎖定和發生了什麼。觸發此討論的代碼是:使用鎖的含義是什麼(typeof(string))
string name = (string)context.Cache[key];
if (String.IsNullOrEmpty(name)){
lock (typeof(string)){
name = (string)context.Cache[key];
//.. other code to get the name and then store in the cache
}
}
我認爲這是直接的:尋找在高速緩存中的值,如果它不存在,然後得到一個鎖,從而沒有其他中斷而代碼獲取名字並將其存儲在緩存中。
我們的討論重點是(typeof(string))是否是最好的做事方式,究竟是做什麼。
我的問題是lock(typeof(string))到底做了什麼?它創建一個本地字符串來使用鎖嗎?它創建的東西是否具有更廣的範圍,因此可能不安全。
不,它鎖定整個類型 - [它可能是危險的](http://stackoverflow.com/questions/1603008/why-is-lock-typeof-mytype-a-problem)。如果它只是創建了一個隨機字符串來鎖定,其他鎖如何知道鎖定該字符串的同一個實例?我建議你製作一個虛擬對象來鎖定,就像'private object _lockOnThis = new object()'一樣。 – vcsjones
我認爲typeof(SomeType)將始終返回相同類型的相同Type實例。所以你會使用一個全球可用的實例作爲鎖,這不是最好的想法恕我直言。 – helb
@vcsjones我目前正在移除這種鎖定方式的所有實例,但對它做了什麼感興趣。 –