Skip to main content
 首页 » 编程设计

c#之锁定指定对象和锁定次要对象有什么区别

2024年01月29日32leader

最近我的一个 friend 问我,他刚开始玩线程,使用次要对象纯粹为了锁定目的或只是锁定您引用的对象之间有什么区别。我不得不承认我不知道,谁能告诉我?我将尝试使用几个代码片段进行演示:

第一种方法:

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) ] 其中的答案暗示这两者是等效的,但如果是这样的话,最好使用哪个,为什么?

我在网上看到了很多例子,我倾向于使用第一种方法作为个人选择,但我想知道使用第二种方法的优点是什么。

请您参考如下方法:

最大的不同在于,使用次要对象只有您的代码知道,不会有来自其他 代码(不是你的)锁定主要对象(其他代码通常可用)。

IMO,也许 CLR 团队使用显式 Lock 类型会做得更好 - 或者 Monitor 应该是非静态的,等等。