我不明白的是这里为什么要引入这个对象,用lock(this)锁定这段代码不行吗

解决方案 »

  1.   

    只有以同一个对象实例为锁定对象的代码才会同步。
    若用this,则当方法suspend所在的类被创建了两个实例时,

    object mutex=new object();
    A a1=new A(mutex);
    A a2=new A(mutex);
    a1.Suspend();//假设在线程1
    a2.Suspend();//假设在线程2若lock(this),则两个Suspend()不同步,因为this分别表示a1和a2两个对象,也就无法实现同步!
    若用lock(mutex),则锁定同一个对象的两个方法会同步。
      

  2.   

    原因是要等待:System.Threading.Monitor.Wait(mutex);造成多锁这里要求一定是object是因为Monitor的目标必须使object,如果是primary data的话,就无法实现,这是这两种数据的存储机制造成的。你用其他任何中的object都可以。
      

  3.   

    我后来又看了一些书,觉得这里的有点象同步的一种方式:信号灯(semaphore).大家以为然否?如果是,还请哪位大虾简单解释一下,看书看的迷迷糊糊的