`

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

分享到:
评论

相关推荐

    读写线程 共享线程 ReaderWriterLock

    手写共享线程,读写线程, 类似于net =》ReaderWriterLock类,当然这个代码有助于你理解 net 的 ReaderWriterLock类

    C#解决SQlite并发异常问题的方法(使用读写锁)

    本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,...作者利用读写锁(ReaderWriterLock),达到了多线程安全访问的目标。 using System; using System.Collections.Generic; using System.Text;

    prex:ES6 Promise之上的异步协调原语和扩展

    类:ReaderWriterLock 接口:LockHandle 界面:UpgradeableLockHandle 类别:递延 排程 类:AsyncQueue 类:AsyncBoundedQueue 类:AsyncStack 功能:延迟(毫秒,值?) 样本 消除 API

    多线程开发 之 ReaderWriterLock

    c# 多线程开发 之 ReaderWriterLock 依然不是很理解线程开发。希望网友们多多指教!

    C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法

    主要介绍了C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法,涉及C#多线程操作读写锁定的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    pyReaderWriterLock:Python 3实现的Readers-writers问题

    安装安装python包readerwriterlock python3 -m pip install -U readerwriterlock 用法根据访问优先级需求和功能需求选择一个rwlock类,这些需求将由线程使用: 优先事项+速度+可降级* 读者优先级(又名第一读者-作家...

    深入多线程之:Reader与Write Locks(读写锁)的使用详解

    线程安全的一个很经常的需求是允许并发读,但是不允许并发写,例如对于文件就是这样的。 ReaderWriterLockSlim 在.net framework 3.5的时候就提供了,它是用来代替以前的”fat”版本的”ReaderWriterLock” 这两个类...

    python线程的几种创建方式详解

    Python3 线程中常用的两个模块为: _thread threading(推荐使用) 使用Thread类创建 import threading from time import sleep,ctime def sing(): for i in range(3): print(正在唱歌...%d%i) ...

    C#中的线程(三)使用多线程

    单元模式和Windows Forms BackgroundWorker类 ReaderWriterLock类 线程池 异步委托 计时器 局部储存

    w3wp进程发生死锁ISAPI aspnet_isapi.dll报告它自身有问题,原因Deadlock detected

    在程序中使用了lock或者ReaderWriterLock,锁资源发生了争用 下面是一小段代码: 代码如下: //_rwLock的类型是ReaderWriterLock _rwLock.AcquireWriterLock(100); DoSomething(); _rwLock.ReleaseWriterLock(); 这...

    线程同步的6种方式的代码

    常用的线程锁分为一下七种:volatile关键字、Lock锁、System.Threading.Interlocked原子级别操作、Monitor、Metux、ReaderWriterLock、EventWaitHandle同步事件。此次代码中包含了以上除了volatile的测试代码

    C#多线程编程实例实战

    单个写入程序/多个阅读程序在.Net 类库中其实已经提供了实现,即 System.Threading.ReaderWriterLock 类。本文通过对常见的单个写入/多个阅读程序的分析来探索c# 的多线程编程。

    线程教程 多线程教程 C# 线程.rar

    个人工作和学习中积累和总结的多线程笔记 包含异步 线程等待 线程异常 线程终止 线程安全 lock monitor mutex autoresetevent semephore readerwriterlock readerwriterlockslim

    非死锁读/写储物柜和线程安全集合

    无法死锁的ReaderWriterLock和线程安全的示例集合

    多线程实战

    单个写入程序/多个阅读程序在.Net类库中其实已经提供了实现,即System.Threading.ReaderWriterLock类。本文通过对常见的单个写入/多个阅读程序的分析来探索c#的多线程编程。

    C# 多线程教材

    C#多线程教材 入门 概述与概念 创建和开始使用多线程 线程同步基础 同步要领 ...ReaderWriterLock类 线程池 异步委托 计时器 局部储存 高级话题 非阻止同步 Wait和Pulse Suspend和Resume 终止线程 概

    CLR via C# 3rd Edition

    全新的一章,讨论了不同的混合构造,如ManualResetEventSlim、SemaphoreSlim、CountdownEvent、Barrier、ReaderWriterLock(Slim)、OneManyResourceLock、Monitor,3种用于处理double-check锁的方式,.NET 4.0中...

    共享锁using范围的实现方法

    代码如下:/// 共享锁</summary> public class ShareLock { ReaderWriterLock Lock; IDisposable readLock, writeLock; public IDisposable ReadLock { get { Lock.AcquireReaderLock(-1); return readLock; } } ...

Global site tag (gtag.js) - Google Analytics