学习

解决方案 »

  1.   

    XX是一个引用对象,不可以是值类型,必须是引用类型。
    当你lock(XX){...}进去后就将XX对象标记为锁定,大括号执行完才恢复,而别的地方也想占用这个锁的时候(也是lock(XX))就必须等这个花括号执行完。如果别的地方已经在等了,那么这边的花括号一执行完,别的地方可以锁定,进执行进去了。
      

  2.   

    msdn:
    xx指定要锁定的对象。expression 必须是引用类型。 
    通常,如果要保护实例变量,则 expression 为 this;如果要保护 static 变量(或者如果临界区出现在给定类的静态方法中),则 expression 为 typeOf (class)
    lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入一个锁定代码,则它将在释放该对象前一直等待(块)。
      

  3.   

    创建一个对象时会额外创建两个东西,一个是方法表指针,一个是同步锁索引(自己随便取的)。
    方法表指针指向一个类型的方法表,可以获得其运行时类型。
    同步锁索引顾名思义是为同步机制设定的。当你lock一个对象时会在一个同步锁缓存区(也忘记真正名字了)分配一个锁,然后将对象的锁索引指向那个分配的锁的索引....
    你可以lock(typeof(MyType))来创建更大的锁(有人说是全局锁),其实这和一般的锁没什么不同,你看成lock(MyType.GetType())应该就好理解些了,他也只是锁一个对象,只是这个对象是静态的(一个类型的GetType()方法永远会返回同一个对象)。