• .net防止写文件线程冲突


    写日志的时候发现,多线程同时操作一个txt文件会报错,一个线程正在占用文件,而当前线程却要操作。

    问了问同事,告诉我这样一个类 System.Threading.ReaderWriterLockSlim

    可以用来控制锁死当前操作,其他的线程等待

    直接上个例子如下,整个过程走完后要等一下,等每个线程写完毕才能看到效果。如果去掉ReadWriteLogSlim则会报错,或者写不完整。

        class Program
        {
            static ReaderWriterLockSlim lockSlim = new ReaderWriterLockSlim();
            static int i = 0;
            static string fileName="test.txt";
            static void Main(string[] args)
            {
                if (File.Exists(fileName)) {//删除历史文件
                    File.Delete(fileName);
                }
                using (FileStream stream = File.Create(fileName))//创建文件
                {
                }
                foreach (var i in Enumerable.Range(0, 100))//分线程启动写日志
                {
                    Task t = new Task(WriteFile);
                    t.Start();
                }
    
                Console.WriteLine("This is the end of program");
                Console.ReadKey(true);
                
            }
    
            public static void WriteFile()
            {
                lockSlim.EnterWriteLock();//打开写操作锁
                try
                {
                    string TestText = i.ToString();
                    string temp = "";
                    using (StreamReader reader = new StreamReader(fileName))
                    {
                        temp = reader.ReadToEnd();
                        reader.Close();
                    }
    
                    using (StreamWriter writer = new StreamWriter(fileName))
                    {
                        writer.WriteLine(temp + TestText);
                        Thread.Sleep(100);//增加写的占用时间用于测试效果
                        writer.Close();
                    }
                    i++;
                }finally
                {
                    lockSlim.ExitWriteLock();//占用完后退出
                }
            }
  • 相关阅读:
    编译错误error: invalid&nbsp…
    移植OK6410'S dm9000ae…
    JavaScript 正则表达式-严格匹配
    JavaScript indexOf() 方法
    JavaScript splice() 方法
    Css文字效果
    知识点-语句
    知识点—变量、运算符(表达式)
    WPF RichTextBox相关总结
    WPF调用图片路径,或资源图片
  • 原文地址:https://www.cnblogs.com/stupidanimal/p/7234581.html
Copyright © 2020-2023  润新知