我最近被一位剛剛開始使用線程的朋友問到,純粹是爲了鎖定目的還是僅僅鎖定您引用的對象而使用次級對象。我不得不承認我不知道,誰能告訴我?我會嘗試與一對夫婦的代碼片段演示:鎖定指定對象和鎖定輔助對象有什麼區別?
第一種方法:
List<string> data = new List<string>();
object datalock = new object();
void main()
{
lock(datalock)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
方法二:
List<string> data = new List<string>();
void main()
{
lock(data)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
是否有顯著差異或者是這個到個人編碼風格?如果存在顯着差異,任何人都可以解釋它是什麼?
我確實遇到過另一個問題[Difference between lock(locker) and lock(variable_which_I_am_using)],其中的答案暗示這兩個都是等價的,但如果是這樣的話,哪個最好用,爲什麼?
我見過很多遍佈網絡的例子,我傾向於使用第一種方法作爲個人選擇的問題,但我想知道使用第二種方法的優點是什麼。
我只是在輸入那個... 我要添加的唯一東西是鎖定主對象確實允許子類知道他們正在做什麼來參與超類鎖定策略,這會提供稍微更大的靈活性 - 但面臨不知道自己在做什麼的消費者可能導致更多問題的風險。 – 2009-04-27 22:16:56