zoukankan      html  css  js  c++  java
  • C# 多线程操作同一文件

    
    

    在多线程访问读写同一个文件时,经常遇到异常:“文件正在由另一进程使用,因此该进程无法访问此文件”。

    解决方案1,可以使用lock,保证读写操作单线程执行

    解决方案2,使用System.Threading.ReaderWriterLockSlim ,对读写操作锁定处理

    读写锁是以 ReaderWriterLockSlim 对象作为锁管理资源的,不同的 ReaderWriterLockSlim 对象中锁定同一个文件也会被视为不同的锁进行管理,这种差异可能会再次导致文件的并发写入问题,所以 ReaderWriterLockSlim 应尽量定义为只读的静态对象。

    ReaderWriterLockSlim 有几个关键的方法,本文仅讨论写入锁:

    调用 EnterWriteLock 方法 进入写入状态,在调用线程进入锁定状态之前一直处于阻塞状态,因此可能永远都不返回
    调用 TryEnterWriteLock 方法 进入写入状态,可指定阻塞的间隔时间,如果调用线程在此间隔期间并未进入写入模式,将返回false
    调用 ExitWriteLock 方法 退出写入状态,应使用 finally 块执行 ExitWriteLock 方法,从而确保调用方退出写入模式。


    static
    ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); public static bool WriteLog(string strValue) { string PathName = string.Format("{0}\log\WriteLog{1:d4}{2:d2}{3:d2}.log", AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); try { LogWriteLock.EnterWriteLock(); string logValue = string.Format("{0} ", strValue);//G是通用格式 File.AppendAllText(PathName, logValue); } catch (Exception e) { return false; } finally { LogWriteLock.ExitWriteLock(); } return true; }
  • 相关阅读:
    第十三周进度条
    寻找水军
    第十二周进度条
    学习总结
    第十五周工作总结
    第十四周工作总结
    《梦断代码》阅读笔记03
    个人工作总结20
    个人工作总结19
    个人工作总结18
  • 原文地址:https://www.cnblogs.com/zhengxia/p/12023337.html
Copyright © 2011-2022 走看看