在锁中使用非静态局部变量有什么意义?

时间:2011-02-24 15:38:46

标签: c# synchronization

有几次我遇到过这个代码,其中一个类中的局部变量(它不是一个静态变量)已被用在锁中。

 public class SomeClass
{
    private object obj = new object();
    ....
    ....
    lock(obj)
    {

    }
}

是否有任何锁定点,因为它是一个实例变量?

2 个答案:

答案 0 :(得分:14)

  

是否有任何锁定点,因为它是一个实例变量?

多个线程可能在同一个实例上运行,并且线程安全需要锁定。例如,考虑共享队列。

答案 1 :(得分:5)

静态锁对于控制对静态变量的访问非常有用。实例锁对于控制对实例变量的访问非常有用。

使用本地锁对象来保护局部变量(除非它是匿名函数或迭代器中捕获的外部变量)没有任何意义,因为其他线程无法访问锁或变量。