我最近被一位刚刚开始使用线程的朋友问到,纯粹是为了锁定目的还是仅仅锁定您引用的对象而使用次级对象。我不得不承认我不知道,谁能告诉我?我会尝试与一对夫妇的代码片段演示:锁定指定对象和锁定辅助对象有什么区别?
第一种方法:
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