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();
                    }
                }
            }
        }
  • 相关阅读:
    实验二
    实验一
    网络对抗技术 实验四 恶意代码技术
    网络对抗技术 实验三 密码破解技术
    网络对抗技术 实验二 网络嗅探与欺骗
    网络对抗技术 实验一 网络侦查与网络扫描
    实验6
    实验5
    caogao
    实验四
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5608115.html
Copyright © 2011-2022 走看看