文件读写冲突的解决办法: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));

优质内容筛选与推荐>>
1、HDU4146 水~
2、Android 获取ROOT权限原理解析
3、移植ffmpeg for iphone模拟器
4、ARM-Linux开发步骤
5、上班头一天


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn