private void DoWork(object state) //DoWork为线程池中的一个线程,其他线程都是DoWork
  {
......
for()//循环
{
....
if(XMLsHelp.GetExist(path,value))  //XMLsHelp.GetExist判断文件名为path的文件是否存在value值。其他线程中的path可能跟这个path相同。
continue;
.....
XMLsHelp.Insert(path,value);   、、、向文件名为path的文件中添加value值
.....
}
.....
  } 
当多线程同时读写一个文件时报错 
这个问题怎么解决?
要尽量的不影响程序的速度    

解决方案 »

  1.   

    lock(synobj)
    {
       XMLsHelp.Insert(path,value); 
    }
      

  2.   

    我试过了,只锁住XMLsHelp.Insert不行,因为XMLsHelp.GetExist也会访问相同的文件
    仍然会报错把XMLsHelp.Insert和XMLsHelp.GetExist都锁了,速度会下降很多。
      

  3.   

    用信号量试试吧ManualResetEvent Alldone= new ManualResetEvent(false);
    Alldone.Reset();
    Alldone.WaitOne();
    //Alldone.WaitAll();
    Alldone.Set()
      

  4.   

    个人认为lock mutex 最可靠。
    当前只允许一个线程操作锁定的代码块。同时读文件是可以的,同时写就不行了。