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("写数据失败");
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    2019年主机游戏将走下坡路
    关于敏捷开发的26个心得
    CSS3弹性布局内容对齐(justify-content)属性使用具体解释
    (cLion、RubyMine、PyCharm、WebStorm、PhpStorm、Appcode、Clion、Idea) 万能破解,获取自己的注冊码
    hdoj-1212-Big Number【大数取余&amp;简单题】
    gitlab https
    gitlab smtp设置
    GitLab: API is not accessibl
    Could not find modernizr-2.6.2 in any of the sources GitLab: API is not accessible
    gitlab
  • 原文地址:https://www.cnblogs.com/Freedom0619/p/4113413.html
Copyright © 2011-2022 走看看