2014-04-22 43 views
0

最近我遇到的代碼來如下:線程同步:具有自己的字符串類型的鎖副本線程

void CallThisInDifferentThreads(Return return) 
{ 
var lock = "lock"; 
lock(lock) 
    { 
     //Do something here. 
    } 
} 

我的第一反應是,在該代碼鎖不會,因爲我們正在創建的鎖定工作並以相同的方法使用它。每個調用這個方法的線程都有自己的鎖副本,所以不會有同步。

但後來我意識到這應該工作,因爲字符串轉到字符串池,並且只有一個特定字符串的實例。我不確定如果我是對的。

+0

你需要讓鎖「靜態」,所以每個線程可以訪問它。 –

+1

「因爲字符串轉到字符串池」 - 字符串可能會或可能不會被實施。你的代碼不應該依賴你的字符串被執行。 – dcastro

回答