Chinaunix首页 | 论坛 | 博客
  • 博客访问: 578615
  • 博文数量: 79
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-04 18:46
文章分类

全部博文(79)

文章存档

2014年(1)

2010年(5)

2009年(8)

2008年(11)

2007年(41)

2006年(13)

我的朋友

分类:

2009-05-16 10:12:50

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_)
        {
        }
    }
}

阅读(4901) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~