MSDN 上对 lock 进行解说的时候,建议不要对要 publish 的对象进行 lock (this) 的操作。一开始不是很理解,不过后来想想,确实不能随意 lock (this)。因为你能 lock (this),同时 this object 也可以被别人 lock,这样就会产生冲突。例如,为了对一个 List
danger 进行同步的操作,我们就会有 lock (danger) 的欲望;如果 List 使用的是 lock (this) 的话,那就完全混乱了。
当然,MSDN 给出了最简单的例子,就是去 lock 一个 private 的专用 Object 对象。
参考:"lock 语句(C# 参考)", , 2009-05-16
public class C
{
// do something in other thread
public void do_something()
{
lock (this)
{
...
}
}
}
C c = new C();
lock (c)
{
new Thread(c.do_something);
// ok, do_something will block until this lock finish!!
}
|
正确做法:
public class C
{
private Object lock_this_ = new Object();
public void foo()
{
lock (lock_this_)
{
}
}
}
|
阅读(4900) | 评论(0) | 转发(0) |