zoukankan      html  css  js  c++  java
  • 读写锁学习(1)——ReaderWriterLock学习

    读写锁的目的:将读和写分离,可以实现多个用户的读操作,但是写操作只能有一个用户执行。

    实例:

    using System;
    using System.Threading;
    
    namespace ProcessTest
    {
        class Program
        {
            static int theResource = 0;
            static ReaderWriterLock rwl = new ReaderWriterLock();
    
            static void Main(string[] args)
            {
                //分别创建2个读操作线程,2个写操作线程,并启动
                Thread tr0 = new Thread(new ThreadStart(Read));
                Thread tr1 = new Thread(new ThreadStart(Read));
                Thread tr2 = new Thread(new ThreadStart(Write));
                Thread tr3 = new Thread(new ThreadStart(Write));
    
                tr0.Start();
                tr1.Start();
                tr2.Start();
                tr3.Start();
    
                ////等待线程执行完毕
                //tr0.Join();
                //tr1.Join();
                //tr2.Join();
                //tr3.Join();
    
                System.Console.ReadKey();
            }
    
            //读数据
            static void Read()
            {
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        //申请读操作锁,如果在1000ms内未获取读操作锁,则放弃
                        rwl.AcquireReaderLock(1000);
                        Console.WriteLine("开始读取数据,theResource = {0}", theResource);
                        Thread.Sleep(10);
                        Console.WriteLine("读取数据结束,theResource = {0}", theResource);
                        //释放读操作锁
                        rwl.ReleaseReaderLock();
                    }
                    catch (ApplicationException)
                    {
                        Console.WriteLine("读数据失败");
                    }
                }
            }
    
            //写数据
            static void Write()
            {
                for (int i = 0; i < 3; i++)
                {
                    try
                    {
                        //申请写操作锁,如果在1000ms内未获取写操作锁,则放弃
                        rwl.AcquireWriterLock(1000);
                        Console.WriteLine("开始写数据,theResource = {0}", theResource);
                        //将theResource加1
                        theResource++;
                        Thread.Sleep(100);
                        Console.WriteLine("写数据结束,theResource = {0}", theResource);
                        //释放写操作锁
                        rwl.ReleaseWriterLock();
                    }
                    catch (ApplicationException)
                    {
                        Console.WriteLine("写数据失败");
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    复制、删除、移动文件、获取文件的版本信息、更改文件属性,删除只读文件
    How to use the MQ?
    StreamReader、 StreamWriter
    我的第一个AJAX程序
    XML操作
    SQL 使用XML数据修改语言
    认识 ASP.NET 3.5 MVC 路由解析分析
    北京2008奥运会开幕式&闭幕式下载(NBCBT附字幕)
    认识 ASP.NET 3.5 MVC 路由 理解默认路由表
    每天都有新发现 2009年10月21日 Decimal 和存储过程OUTPUT
  • 原文地址:https://www.cnblogs.com/Freedom0619/p/4113413.html
Copyright © 2011-2022 走看看