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();
                    }
                }
            }
        }
  • 相关阅读:
    使用Redux管理你的React应用(转载)
    基于webpack使用ES6新特性(转载)
    在SublimeText上搭建ReactJS开发环境(转载)
    Javascript 严格模式详解
    HTML5探秘:用requestAnimationFrame优化Web动画
    requestAnimationFrame,Web中写动画的另一种选择
    Gulp自动添加版本号(转载)
    一小时包教会 —— webpack 入门指南
    React 入门实例教程(转载)
    走向视网膜(Retina)的Web时代
  • 原文地址:https://www.cnblogs.com/shidengyun/p/5608115.html
Copyright © 2011-2022 走看看