12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
-
- using System;
- using System.Collections.Generic;
- using System.Threading;
- namespace Topten.JsonKit
- {
- class ThreadSafeCache<TKey, TValue>
- {
- public ThreadSafeCache()
- {
- }
- public TValue Get(TKey key, Func<TValue> createIt)
- {
-
- _lock.EnterReadLock();
- try
- {
- TValue val;
- if (_map.TryGetValue(key, out val))
- return val;
- }
- finally
- {
- _lock.ExitReadLock();
- }
-
- _lock.EnterWriteLock();
- try
- {
-
- TValue val;
- if (!_map.TryGetValue(key, out val))
- {
-
- val = createIt();
- _map[key] = val;
- }
- return val;
- }
- finally
- {
- _lock.ExitWriteLock();
- }
- }
- public bool TryGetValue(TKey key, out TValue val)
- {
- _lock.EnterReadLock();
- try
- {
- return _map.TryGetValue(key, out val);
- }
- finally
- {
- _lock.ExitReadLock();
- }
- }
- public void Set(TKey key, TValue value)
- {
- _lock.EnterWriteLock();
- try
- {
- _map[key] = value;
- }
- finally
- {
- _lock.ExitWriteLock();
- }
- }
- Dictionary<TKey, TValue> _map = new Dictionary<TKey,TValue>();
- ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
- }
- }
|