日期:2014-05-18  浏览次数:21007 次

用两个streamReader同时读一个文件 会产生什么问题么?例如死锁,
在多线程情况下,用两个streamReader同时读一个文件   会产生什么问题么?例如死锁,   还是不会影响?

thread   th1=new   thread(new   threadStart(do1));
thread   th2=new   thread(new   threadStart(do2));
do1.start();do2.start();


void   do1()
{
    StreamReader   sr1=new   StreamReader(FileName,System.Text.Encoding.UTF8);
sr1.BaseStream.Seek(0,SeekOrigin.Begin);
while(sr1.Peek()>   -1)
{
sr1.ReadLine();
count++;
}
sr1.Close();
     


}

void   do2()
{
    StreamReader   sr1=new   StreamReader(FileName,System.Text.Encoding.UTF8);
sr1.BaseStream.Seek(0,SeekOrigin.Begin);
while(sr1.Peek()>   -1)
{
sr1.ReadLine();
count++;
}
sr1.Close();
     


}



------解决方案--------------------
把读取文件的部分写成一个函数,使用lock锁定:

lock(this)
{
System.IO.StreamReader red = new StreamReader( "file.txt ");
while (red.Read())
{
....
}
red.Close();
}
------解决方案--------------------
两个都是只读打开已经不会有问题吧,感觉.
------解决方案--------------------
//Monitor.Enter(this);
//Monitor.Pulse(this);
在这里处理可能冲突数据
//Monitor.Exit(this);

必须预防冲突