不知道大家在处理多线程的时候是用什么对象做同步锁的。
以前用一个string类型,如:object  syncObj=(object)"aaa";lock(syncObj)
{
  ……
}如果有多个不同的类也用"aaa"做同步锁,那么所有线程都会被锁住。
后来只好改成用lock(this)了,但又觉得lock(this)粒度不够。
不知道大家怎么用的,交流者有分

解决方案 »

  1.   

    object  syncObj=new object(); lock(syncObj) 

      …… 
    } 只要syncObj不是static,就木问题
      

  2.   

    http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
      

  3.   

    http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
      

  4.   

    http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
    可以看kan
      

  5.   

    http://blog.sina.com.cn/s/blog_3f88d75301000ad1.html
    在这里...
      

  6.   

    楼主请注意:实际上,“多线程同步”和“双线程同步”之间并无本质区别,仅仅两个线程同样可以导致死锁。因此,你的着眼点不应该是有几个线程,而是有多少个“共享数据”。
    有一个很简单而且可以提高代码可维护性的方法:
    1、搞清楚有多少数据需要共享,假设有A、B、C。
    2、把它们分组,例如A和B总是同时被一个线程操作,不可能“分家”,那就把它们作为一组。
    3、为每组设定一个互斥信号量:SignalAB,SignalC等
    4、每个线程里,通过对相应的信号量操作,实现同步。
      

  7.   

    我说几个:
    1:我觉得尽量不要使用string类型来锁定,因为string类型在处理的时候可能会比较麻烦。其实你完全可以:
    object  syncObj=new object(); 2:似乎在很多地方都不太推荐使用lock(this),不过这并不是因为锁定的粒度,而是其它可能导致锁定范围或者死锁之类的原因。
    一般我都是在类的内部使用一个专门的syncObject对象来处理锁定。很多时候,一个线程安全的类也不用把锁暴露给外部,自己在方法和属性中加锁就可以了。
      

  8.   

    实际上,“多线程同步”和“双线程同步”之间并无本质区别,仅仅两个线程同样可以导致死锁。因此,你的着眼点不应该是有几个线程,而是有多少个“共享数据”。 
    有一个很简单而且可以提高代码可维护性的方法: 
    1、搞清楚有多少数据需要共享,假设有A、B、C。 
    2、把它们分组,例如A和B总是同时被一个线程操作,不可能“分家”,那就把它们作为一组。 
    3、为每组设定一个互斥信号量:SignalAB,SignalC等 
    4、每个线程里,通过对相应的信号量操作,实现同步。
      

  9.   

    public void Function() 
    {
    object lockThis = new object (); 
    lock (lockThis)
    {
    // Access thread-sensitive resources. 
    }
    } SyncRoot可以使用 引用类型的 私有或受保护 成员,但别用字符串.