`

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

分享到:
评论

相关推荐

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

    C#中解决SQLite数据库并发异常问题的方法主要涉及到多线程环境下读写锁的使用。SQLite是一个轻量级的文件型数据库,它在设计上通过文件锁来管理并发访问。这意味着多个线程可以同时进行读操作,但在同一时间内只有一...

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

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

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

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

    Threading in C# 中文版

    `ReaderWriterLock`和`ReaderWriterLockSlim`类提供了一种高效的读写锁机制,允许多个读取线程同时访问共享资源,但只允许一个写入线程访问资源。 #### 线程池 线程池是一种管理线程的有效方式,它重用一组预先创建...

    快速读/写锁

    它优化了传统的互斥锁,使得多个读者可以同时访问共享资源而不会冲突,但当有写者时,所有读写操作都会被阻塞,直到写操作完成。这种设计允许更高的并行度,因为它减少了等待锁的时间。 在传统的互斥锁中,任何时刻...

Global site tag (gtag.js) - Google Analytics