我定义了一个
public Object thisLock = new Object();
然后再需要加锁的地方
lock(thisLock )
{
//临界区
}
......
lock(thisLock )
{
//临界区
}
好像两个临界区没有实现互斥,加锁的地方不在一个类里面,这是怎么回事?谢谢

解决方案 »

  1.   

    thisLock 必须为全局的,你定义为 static的吧 ,否则不同的类中thisLock 都是不同的,你加锁根本没有意义
      

  2.   


    在别的类里面怎么引用static?
      

  3.   

    在别的类里面怎么对static加锁呢?lock(lockthis)出错,不能引用静态
      

  4.   

    加锁的地方不在一个类里面,你说的是new的class里面放了锁的代码吗?那样没用吧,全局变量或方法才需要加锁,我的理解
      

  5.   

    既然是锁,那就应该是同一把锁。一个类的成员变量,不同对象,就不同了,所以没有互斥效果。
    改为static是 个方法。
      

  6.   

    lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。线程处理(C# 编程指南) 这节讨论了线程处理。lock 调用块开始位置的 Enter 和块结束位置的 Exit。通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:如果实例可以被公共访问,将出现 lock (this) 问题。如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。 最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。http://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx
      

  7.   

    那thislock定义为static的,全局的就可以