有一个数组(其它的类型类似,hash、list等),有100个线程往这一个数组里追加数据,我需要在追加之前lock住吗?新手,希望详细些!

解决方案 »

  1.   

    看你的顺序是不是重要了,如果顺序不重要,lock不lock无所谓,但如果你有其他操作,如验证是不是重复list.contains()等访问list的方法,最好lock一下
    如果lock了,这可能会成为多线程的小瓶颈
      

  2.   


    List<string> list = new List<string>();
       lock((list as ICollection).SyncRoot)
                {
                    list.Add("A");
                }
      

  3.   

    线程中去互斥,这个要你确定的,如果某个线程就是不管互斥与否直接访问,也就出错了。你可以lock这个数组(其它的类型类似,hash、list等)。
      

  4.   

    你可以看看线程并发冲突解决的方法,相关的关键字:
    临界区
    互斥体
    信号量c#下关键字搜索:
    Mutex
    Monitor
    AutoResetEvent
      

  5.   

    lock之后,其他线程处于等待状态,有可能出现超时现象,大家共同学习
      

  6.   

    看死锁的定义,简单说。就是循环等待。
         A
      B    C三个线程,A等C,C等B,B等A。
    或是常见的串口通讯的死锁。总之就是2个会并发的线程或是可能相互调用的线程,出现了并发而且彼此等待对方先做完某事。这样往往是看到超时的提示或现象,实际上是没可能结束的死锁。
      

  7.   

    那看我的程序不可能出现死锁了,往数组中追加数据时,只需lock住,没有互相等待的情况
      

  8.   

    公共资源在处理之前都需要lock