lock (this.ModelData.SimpleDataCache) {
    lock (this.ModelData.ComplexDataCache) {
       this.CaseLogic(cmd, ps);
       this.OnAsynCaseCallbacke(sender, cmd);
    }
}//
我这样写两层 好不好, 因为我要锁定两个 集合 一个是 List<T>(上面的lock) 一个是 Dictionary<T1,T2>(下面的lock)这两个 集合需要资源同步 因为  this.ModelData这个对象 很多地方用又是 public的 ,如果其它地方用 而钱程又上锁,MSDN也说public 锁了不好,所以就没有写成 lock(this.ModelData){}这种 方式了,请达人请点 该怎么做好! 谢谢..

解决方案 »

  1.   

    保险一点 lock (this) 或者 lock (this.ModelData)
      

  2.   

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