为什么锁(这){…坏?这个MSDN文档说public class SomeObject{
public void SomeOperation()
{
lock(this)
{
//Access instance variables
}
}}是“如果实例可以公开访问的问题”。我在想为什么?是因为锁的时间比必要的长吗?还是有更阴险的原因?
3 回答
浮云间
TA贡献1829条经验 获得超4个赞
this
this
List<int>
慕田峪4524236
TA贡献1875条经验 获得超5个赞
通常,最好避免锁定公共类型或应用程序无法控制的对象实例。例如,如果可以公开访问实例,锁(这个)可能会有问题,因为超出您控制范围的代码也可能锁定对象。 这可能会造成死锁情况,其中两个或多个线程等待同一个对象的释放。..锁定公共数据类型(而不是对象)可能会因为同样的原因而导致问题。锁定文字字符串是特别危险的,因为文字字符串是由公共语言运行库(CLR)内嵌的。这意味着对于整个程序,任何给定的字符串文本都有一个实例,在所有线程上,在所有运行的应用程序域中,完全相同的对象表示文本。因此,在应用程序进程中的任何位置放置具有相同内容的字符串的锁都会锁定应用程序中该字符串的所有实例。因此,最好锁定未被拘留的私有或受保护成员。有些类提供专门用于锁定的成员。例如,Array类型提供Syncroot。许多集合类型也提供Syncroot成员。
- 3 回答
- 0 关注
- 498 浏览
添加回答
举报
0/150
提交
取消