wasSharp – Diff between revs 44 and 54
?pathlinks?
Rev 44 | Rev 54 | |||
---|---|---|---|---|
Line 9... | Line 9... | |||
9 | using System.Linq; |
9 | using System.Linq; |
|
10 | using System.Threading; |
10 | using System.Threading; |
|
Line 11... | Line 11... | |||
11 | |
11 | |
|
12 | namespace wasSharp.Collections.Specialized |
12 | namespace wasSharp.Collections.Specialized |
|
13 | { |
13 | { |
|
14 | public class MultiKeyDictionary<K1, K2, V> : Dictionary<K1, Dictionary<K2, V>> |
14 | public class ConcurrentMultiKeyDictionary<K1, K2, V> : Dictionary<K1, Dictionary<K2, V>> |
|
15 | { |
15 | { |
|
Line 16... | Line 16... | |||
16 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
16 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
|
17 | |
17 | |
|
Line 131... | Line 131... | |||
131 | if (_lock.IsReadLockHeld) _lock.ExitReadLock(); |
131 | if (_lock.IsReadLockHeld) _lock.ExitReadLock(); |
|
132 | } |
132 | } |
|
133 | } |
133 | } |
|
134 | } |
134 | } |
|
Line 135... | Line 135... | |||
135 | |
135 | |
|
136 | public class MultiKeyDictionary<K1, K2, K3, V> : Dictionary<K1, MultiKeyDictionary<K2, K3, V>> |
136 | public class MultiKeyDictionary<K1, K2, K3, V> : Dictionary<K1, ConcurrentMultiKeyDictionary<K2, K3, V>> |
|
137 | { |
137 | { |
|
Line 138... | Line 138... | |||
138 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
138 | private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
|
139 | |
139 | |
|
Line 155... | Line 155... | |||
155 | { |
155 | { |
|
156 | _lock.EnterWriteLock(); |
156 | _lock.EnterWriteLock(); |
|
157 | try |
157 | try |
|
158 | { |
158 | { |
|
159 | if (!ContainsKey(key1)) |
159 | if (!ContainsKey(key1)) |
|
160 | this[key1] = new MultiKeyDictionary<K2, K3, V>(); |
160 | this[key1] = new ConcurrentMultiKeyDictionary<K2, K3, V>(); |
|
Line 161... | Line 161... | |||
161 | |
161 | |
|
162 | this[key1][key2, key3] = value; |
162 | this[key1][key2, key3] = value; |
|
163 | } |
163 | } |
|
164 | finally |
164 | finally |
|
Line 185... | Line 185... | |||
185 | { |
185 | { |
|
186 | _lock.EnterWriteLock(); |
186 | _lock.EnterWriteLock(); |
|
187 | try |
187 | try |
|
188 | { |
188 | { |
|
189 | if (!ContainsKey(key1)) |
189 | if (!ContainsKey(key1)) |
|
190 | this[key1] = new MultiKeyDictionary<K2, K3, V>(); |
190 | this[key1] = new ConcurrentMultiKeyDictionary<K2, K3, V>(); |
|
191 | this[key1][key2, key3] = value; |
191 | this[key1][key2, key3] = value; |
|
192 | } |
192 | } |
|
193 | finally |
193 | finally |
|
194 | { |
194 | { |
|
195 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |
195 | if (_lock.IsWriteLockHeld) _lock.ExitWriteLock(); |