我發佈我對C#鎖的理解如下,請幫助我驗證我是否正確。C#鎖關鍵字的用法
public class TestLock
{
private object threadLock = new object();
...
public void PrintOne()
{
lock (threadLock)
{
// SectionOne
}
}
public void PrintTwo()
{
lock (threadLock)
{
// SectionTwo
}
}
...
}
案例I>線程1和線程同時試圖調用PrintOne。 由於PrintOne由實例鎖保護,因此在任何時候,只有一個線程可以專門進入SectionOne。
這是正確的嗎?
案例二>線程1和線程同時嘗試分別撥打PrintOne和PrintTwo (即線程1調用PrintOne及線程調用PrintTwo) 由於兩個打印方法是由同一個實例鎖保護,在任何時候, 只有一個線程可以獨佔訪問SectionOne或SectionTwo,但不能同時訪問兩者。
這是正確的嗎?
總結如下答案:代碼是線程安全的僅爲實例。當實例共享資源時,@oleski有正確答案(=否) – 2011-05-27 22:15:57
因此-1不包含共享數據/資源。請編輯。 – 2011-05-27 22:21:19
這是一個有效的觀點,但最初的問題並沒有說明這些實例是否是單獨的,因此,從編寫代碼/問題的方式來看,假設他正在討論針對同一實例進行的調用是安全的。所以,我不同意你的失望,但那是你的代表。 – 2011-05-27 22:43:21