码迷,mamicode.com
首页 > 其他好文 > 详细

读写锁学习(1)——ReaderWriterLock学习

时间:2014-11-21 18:24:10      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   sp   for   数据   on   div   art   

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

实例:

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("写数据失败");
                }
            }
        }
    }
}

 

读写锁学习(1)——ReaderWriterLock学习

标签:blog   io   ar   sp   for   数据   on   div   art   

原文地址:http://www.cnblogs.com/Freedom0619/p/4113413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!