Hashtable ht = new Hashtable() ;
htable.Add("a", new Channel());
我现在有多个线程在运行,他们可能会同时修改一个Channel类实例的属性,这个类是存在hashtable里面
对同一个类修改,这样会不会发生死锁?

解决方案 »

  1.   

    lock 控制一下不就可以避免了
      

  2.   

    然后在线程hashtable中的某个对象修改前, Lock这个对象
      

  3.   

    Hashtable类有个静态的Synchronized方法,可以用来返回Hashtable 的同步(线程安全)包装
      

  4.   

    线程没加锁是不会死锁的,只会导致共享的资源数据混乱;
    当你lock了共享资源的读写之后,并且有多个线程互相wait对方的lock结果,才可能会死锁。
      

  5.   

    修改实例 lock实例就可以了
      

  6.   

    c#几乎不存在原子操作
    即使最基本的赋值都不是原子操作
    使用多线程时,有共享资源都要lock
      

  7.   

    我的实例里面,都是get set方法 //已组包数
            public int package_count
            {
                get { return _package_count; }
                set { _package_count = value; }
            }
            //未组包条码数
            public int unPackageCode_count
            {
                get { return _unPackageCode_count; }
                set { _unPackageCode_count = value; }
            }
    都是这样的代码,请问如果加lock的话,该怎么加呢?本人刚学c#,还请大家多多帮助下,谢谢啦
      

  8.   

    Channel类的实例时全局的,是会被多个线程操作的,都能访问到
      

  9.   

    声明个静态变量 
    lock上
      

  10.   

    自己定义一个无用的string 然后lock此string,修改代码过了,就lock结束
    例如:
            string xx = string.Empty;
            lock (xx)
            {
                //修改要加锁的变量
            }