zoukankan      html  css  js  c++  java
  • 文件读写冲突的解决办法: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));

  • 相关阅读:
    JFinal框架
    shiro认证登录实现
    linux常用的命令
    zookeeper部署到linux操作步骤
    java的冒泡排序
    软件设计的七大原则
    vue知识点整理
    JVM垃圾回收算法
    Sql Server删库了怎么办?跑路是不可能跑路的
    Linux--find用法
  • 原文地址:https://www.cnblogs.com/mad/p/1787883.html
Copyright © 2011-2022 走看看