程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# ReaderWriterLock

C# ReaderWriterLock

編輯:C#入門知識

使用一個ReaderWriterLock來實現一個同步的Cache, 以便控制對該Cache的讀寫.        

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading;  
  
namespace ReadWriteLockSlimTest  
{  
    class SynchronizedCache  
    {  
        private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();  
        private Dictionary<int, string> innerCache = new Dictionary<int, string>();  
  
        public string Read(int key)  
        {  
            cacheLock.EnterReadLock();  
            try  
            {  
                return innerCache[key];  
            }  
            finally  
            {  
                cacheLock.ExitWriteLock();  
            }  
        }  
  
        public void Add(int key, string value)  
        {  
            cacheLock.EnterWriteLock();  
            try  
            {  
                innerCache.Add(key, value);  
            }  
            finally  
            {  
                cacheLock.ExitWriteLock();  
            }  
        }  
  
        public bool AddWithTimeout(int key, string value, int timeout)  
        {  
            if (cacheLock.TryEnterWriteLock(timeout))  
            {  
                try  
                {  
                    innerCache.Add(key, value);  
                }  
                finally  
                {  
                    cacheLock.ExitWriteLock();  
                }  
                return true;  
            }  
            else  
            {  
                return false;  
            }  
        }  
  
        public AddOrUpdateStatus AddOrUpdate(int key, string value)  
        {  
            cacheLock.EnterUpgradeableReadLock();  
            try  
            {  
                string result = null;  
                if (innerCache.TryGetValue(key, out result))  
                {  
                    if (result == value)  
                    {  
                        return AddOrUpdateStatus.Unchanged;  
                    }  
                    else  
                    {  
                        cacheLock.EnterWriteLock();  
                        try  
                        {  
                            innerCache[key] = value;  
                        }  
                        finally  
                        {  
                            cacheLock.ExitWriteLock();  
                        }  
                        return AddOrUpdateStatus.Updated;  
                    }  
                }  
                else  
                {  
                    cacheLock.EnterWriteLock();  
                    try  
                    {  
                        innerCache.Add(key, value);  
                    }  
                    finally  
                    {  
                        cacheLock.ExitWriteLock();  
                    }  
                    return AddOrUpdateStatus.Added;  
                }  
            }  
            finally  
            {  
                cacheLock.ExitUpgradeableReadLock();  
            }  
        }  
  
        public void Delete(int key)  
        {  
            cacheLock.EnterWriteLock();  
            try  
            {  
                innerCache.Remove(key);  
            }  
            finally  
            {  
                cacheLock.ExitWriteLock();  
            }  
        }  
  
        public enum AddOrUpdateStatus  
        {  
            Added,  
            Updated,  
            Unchanged  
        };  
    }  
}  

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved