代码如下:
如果是单个线程读取文件并写到控制台上不会出现问题。但是如果两个线程同时写,文件中的一些内容就丢失了?问下是什么原因???????????
谢谢了、
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);
            }
        }
    }
}

解决方案 »

  1.   

    class A中增加一个变量
    static object objRead = new object();然后:
    sLine = objReader.ReadLine();
    改为:
    lock(objRead)
    {
        sLine = objReader.ReadLine();
    }
    因为读文件这个过程不是线程安全的,要用锁。
      

  2.   

    允许多个线程同时读是没错,但是,你这里必须要同步“读”这个操作,也就是说,A线程读了一行,然后在A线程还没有读下一行的时候,B也读了一行,这个时候,A读的下一行,将会是隔一行的