• 文件读写冲突的解决办法:ReaderWriterLock


    项目中碰到了静态页文件读写冲突的问题(如果同时存在读写就报黄页,虽然写入是“瞬间”的,但高并发下依然有可能)。

        public class ReaderWriterLockHelper
        {
            static ReaderWriterLock rwl = new ReaderWriterLock();
    
            public static void ReadFromResource(int timeOut, Action readAction)
            {
                try
                {
                    rwl.AcquireReaderLock(timeOut);
                    try
                    {
                        readAction();
                    }
                    finally
                    {
                        rwl.ReleaseReaderLock();
                    }
                }
                catch (ApplicationException)
                {
                }
            }
    
            public static void WriteToResource(int timeOut, Action writeAction)
            {
                try
                {
                    rwl.AcquireWriterLock(timeOut);
                    try
                    {
                        writeAction();
                    }
                    finally
                    {
                        rwl.ReleaseWriterLock();
                    }
                }
                catch (ApplicationException)
                {
                }
            }
        }
    
    

    写入:

    var thread = new Thread(context =>
    {
        HttpContext.Current = (HttpContext)context;
        var content = TemplateFactory.ReplaceContent(template);
        ReaderWriterLockHelper.WriteToResource(10, () =>
        {
            using (var sw = fileInfo.CreateText())
            {
                sw.WriteLine(content);
                sw.Close();
            }
        });
    });
    thread.Start(HttpContext.Current);
    

    读取:

    ReaderWriterLockHelper.ReadFromResource(10, () => context.Response.WriteFile(url));

  • 相关阅读:
    Git
    Git
    Git
    Git
    Docker
    Linux
    Linux
    Python
    Python
    SQL
  • 原文地址:https://www.cnblogs.com/mad/p/1787883.html
Copyright © 2020-2023  润新知