zoukankan      html  css  js  c++  java
  • 多线程15-ReaderWriterLockSlim

        class Program
        {
            static void Main()
            {
                new Thread(Read) { IsBackground = true }.Start();
                new Thread(Read) { IsBackground = true }.Start();
                new Thread(Read) { IsBackground = true }.Start();
                new Thread(Read) { IsBackground = true }.Start();
                new Thread(Read) { IsBackground = true }.Start();
                new Thread(() => Write("T1")) { IsBackground = true }.Start();
                new Thread(() => Write("T2")) { IsBackground = true }.Start();
                Thread.Sleep(TimeSpan.FromSeconds(30));
            }
            static ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();
            static Dictionary<intint> items = new Dictionary<intint>();
            static void Read()
            {
                Console.WriteLine("Readind contents of a dictionary");
                while (true)
                {
                    try
                    {
                        rwl.EnterReadLock();
                        foreach (var item in items.Keys)
                        {
                            Thread.Sleep(TimeSpan.FromSeconds(0.1));
                            Console.WriteLine(items[item]);
                        }
                    }
                    finally
                    {
                        rwl.ExitReadLock();
                    }
                }
            }
            static void Write(string threadName)
            {
                while (true)
                {
                    try
                    {
                        int newKey = new Random().Next(250);
                        rwl.EnterUpgradeableReadLock();
                        if (!items.ContainsKey(newKey))
                        {
                            try
                            {
                                rwl.EnterWriteLock();
                                items[newKey] = newKey;
                                Console.WriteLine("New Key {0} is added to a dictionary by a {1}", newKey, threadName);
                            }
                            finally
                            {
                                rwl.ExitWriteLock();
                            }
                        }
                        Thread.Sleep(TimeSpan.FromSeconds(0.1));
                    }
                    finally
                    {
                        rwl.ExitUpgradeableReadLock();
                    }
                }
            }
        }
  • 相关阅读:
    图解测试之稳定性-如何开始稳定性测试
    系统稳定性保障
    系统稳定性评测
    分布式架构的架构稳定性
    app测试--稳定性测试
    服务器稳定性测试方法汇总
    服务端稳定性测试
    发票问题
    android x86 固件定制
    Nim游戏博弈(收集完全版)
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5608115.html
Copyright © 2011-2022 走看看