代码如下:
如果是单个线程读取文件并写到控制台上不会出现问题。但是如果两个线程同时写,文件中的一些内容就丢失了?问下是什么原因???????????
谢谢了、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
namespace ReadFileMutiThreadTest
{
class A
{
public static void DoWork()
{
StreamReader objReader = new StreamReader("c:\\242\\2010年8月bupt1.txt");
string sLine = "";
ArrayList arrText = new ArrayList(); while (sLine != null)//sLine指向空字符串,但sline值不为空。
{
try
{
sLine = objReader.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e);
}
if (sLine != null)
arrText.Add(sLine);
Console.WriteLine(sLine);
}
objReader.Close(); //foreach (string sOutput in arrText)
// Console.WriteLine(sOutput);
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleTest
{
class A
{
public static void DoWork()
{
for (int i = 0; i < 50; i++)
{
Console.WriteLine("线程A:{0}",i);
}
}
}
}
如果是单个线程读取文件并写到控制台上不会出现问题。但是如果两个线程同时写,文件中的一些内容就丢失了?问下是什么原因???????????
谢谢了、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
namespace ReadFileMutiThreadTest
{
class A
{
public static void DoWork()
{
StreamReader objReader = new StreamReader("c:\\242\\2010年8月bupt1.txt");
string sLine = "";
ArrayList arrText = new ArrayList(); while (sLine != null)//sLine指向空字符串,但sline值不为空。
{
try
{
sLine = objReader.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e);
}
if (sLine != null)
arrText.Add(sLine);
Console.WriteLine(sLine);
}
objReader.Close(); //foreach (string sOutput in arrText)
// Console.WriteLine(sOutput);
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleTest
{
class A
{
public static void DoWork()
{
for (int i = 0; i < 50; i++)
{
Console.WriteLine("线程A:{0}",i);
}
}
}
}
static object objRead = new object();然后:
sLine = objReader.ReadLine();
改为:
lock(objRead)
{
sLine = objReader.ReadLine();
}
因为读文件这个过程不是线程安全的,要用锁。