`

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

    net并发数据结构读写锁

    【并发数据结构与读写锁】在多线程编程中,确保线程安全至关重要,而读写锁(ReaderWriterLock)是一种高效的线程同步机制,特别适用于读操作频繁而写操作较少的情况。读写锁允许多个线程同时读取资源,但只允许一个...

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

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

    多线程开发 之 ReaderWriterLock

    ReaderWriterLock提供了一种细粒度的锁,用于解决并发访问资源的问题。它可以区分读操作和写操作,从而提高系统的并行性能。读锁(ReadLock)是共享的,允许多个读取者同时进行,而写锁(WriteLock)是独占的,一次...

    多线程模拟读者写者问题,采用读写平等方式

    在实际项目中,Java并发库提供了`java.util.concurrent.locks.ReentrantReadWriteLock`类,它是一个可重入的读写锁,可以更高效地处理读写冲突,但这里我们选择了一个更基础的实现,以便更好地理解读者写者问题的...

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

    ReaderWriterLock类位于System.Threading命名空间,其主要功能是实现读写锁,允许多个线程同时进行读操作,而写操作则互斥进行。这意味着在没有写锁的情况下,多个读线程可以并发地访问资源,但当有写线程持有写锁时...

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

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

    线程同步对象方法

    5. **ReaderWriterLock 类**:ReaderWriterLock提供了一种读写锁机制,允许多个读取线程同时访问资源,但在写入时,所有线程都会被阻止。这提高了并发性能,特别是当读取操作远多于写入操作时。 在选择线程同步对象...

    C#读写线程同步Demo

    4. **ReaderWriterLock和ReaderWriterLockSlim**:这两个类专为读写同步设计,提供读优先的线程同步。允许多个读线程同时访问,但在有写线程时,所有读写线程都会被阻塞。 5. **lock关键字**:这是C#中的一个语法糖...

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

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

    c#多线程编程笔记5(完结).pdf

    ReaderWriterLock类是为了解决多线程环境下读写资源的并发访问问题。在很多情况下,我们有这样一种场景:多个线程可能同时读取共享资源,但写入资源时必须独占访问。 在这段代码中,ReaderWriterLock被用来协调读取...

    C#多线程编程实例实战[借鉴].pdf

    从提供的文件内容来看,这篇文档主要介绍了C#多线程编程中使用`ReaderWriterLock`类进行读写锁控制的实例。以下是根据文档内容提取的知识点: ### ReaderWriterLock类的基本使用 `ReaderWriterLock`是.NET框架中...

    tongbu.rar_c# 数据同步_synchronization_数据同步

    5. **冲突解决**:当多个客户端同时修改同一数据时,需要有冲突检测和解决机制。 6. **断开连接**:完成同步后,客户端和服务器安全地关闭连接。 在“tongbu.rar”文件中,可能包含了实现这些功能的代码示例和库。...

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

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

    多线程实战

    这主要是为了解决在多线程环境下读写冲突的问题,提高系统的整体性能。 ##### 原理 - **写入者优先原则**:当一个写入者正在修改资源时,其他试图读取或写入的线程必须等待,直到该写入者完成操作并释放锁。 - **...

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

    在 .NET 平台上,ReaderWriterLock 类提供了一种机制来解决这类问题,而线程安全的集合则保证了在并发环境下的数据一致性。 1. **ReaderWriterLock**: ReaderWriterLock 提供了读优先的锁定策略,允许多个读取线程...

    C#多线程探索---讲诉多线程

    C#提供了多种同步机制,如互斥锁(`Mutex`)、读写锁(`ReaderWriterLock`)、信号量(`Semaphore`)和`Monitor`类,用于保护临界区和实现线程间的同步。 死锁是多线程编程中的一大挑战,发生在两个或更多线程互相等待...

Global site tag (gtag.js) - Google Analytics