aboutsummaryrefslogtreecommitdiff
path: root/src/ARMeilleure/Translation/TranslatorCache.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARMeilleure/Translation/TranslatorCache.cs')
-rw-r--r--src/ARMeilleure/Translation/TranslatorCache.cs36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/ARMeilleure/Translation/TranslatorCache.cs b/src/ARMeilleure/Translation/TranslatorCache.cs
index 11286381..99ca58dc 100644
--- a/src/ARMeilleure/Translation/TranslatorCache.cs
+++ b/src/ARMeilleure/Translation/TranslatorCache.cs
@@ -7,14 +7,14 @@ namespace ARMeilleure.Translation
internal class TranslatorCache<T>
{
private readonly IntervalTree<ulong, T> _tree;
- private readonly ReaderWriterLock _treeLock;
+ private readonly ReaderWriterLockSlim _treeLock;
public int Count => _tree.Count;
public TranslatorCache()
{
_tree = new IntervalTree<ulong, T>();
- _treeLock = new ReaderWriterLock();
+ _treeLock = new ReaderWriterLockSlim();
}
public bool TryAdd(ulong address, ulong size, T value)
@@ -24,70 +24,70 @@ namespace ARMeilleure.Translation
public bool AddOrUpdate(ulong address, ulong size, T value, Func<ulong, T, T> updateFactoryCallback)
{
- _treeLock.AcquireWriterLock(Timeout.Infinite);
+ _treeLock.EnterWriteLock();
bool result = _tree.AddOrUpdate(address, address + size, value, updateFactoryCallback);
- _treeLock.ReleaseWriterLock();
+ _treeLock.ExitWriteLock();
return result;
}
public T GetOrAdd(ulong address, ulong size, T value)
{
- _treeLock.AcquireWriterLock(Timeout.Infinite);
+ _treeLock.EnterWriteLock();
value = _tree.GetOrAdd(address, address + size, value);
- _treeLock.ReleaseWriterLock();
+ _treeLock.ExitWriteLock();
return value;
}
public bool Remove(ulong address)
{
- _treeLock.AcquireWriterLock(Timeout.Infinite);
+ _treeLock.EnterWriteLock();
bool removed = _tree.Remove(address) != 0;
- _treeLock.ReleaseWriterLock();
+ _treeLock.ExitWriteLock();
return removed;
}
public void Clear()
{
- _treeLock.AcquireWriterLock(Timeout.Infinite);
+ _treeLock.EnterWriteLock();
_tree.Clear();
- _treeLock.ReleaseWriterLock();
+ _treeLock.ExitWriteLock();
}
public bool ContainsKey(ulong address)
{
- _treeLock.AcquireReaderLock(Timeout.Infinite);
+ _treeLock.EnterReadLock();
bool result = _tree.ContainsKey(address);
- _treeLock.ReleaseReaderLock();
+ _treeLock.ExitReadLock();
return result;
}
public bool TryGetValue(ulong address, out T value)
{
- _treeLock.AcquireReaderLock(Timeout.Infinite);
+ _treeLock.EnterReadLock();
bool result = _tree.TryGet(address, out value);
- _treeLock.ReleaseReaderLock();
+ _treeLock.ExitReadLock();
return result;
}
public int GetOverlaps(ulong address, ulong size, ref ulong[] overlaps)
{
- _treeLock.AcquireReaderLock(Timeout.Infinite);
+ _treeLock.EnterReadLock();
int count = _tree.Get(address, address + size, ref overlaps);
- _treeLock.ReleaseReaderLock();
+ _treeLock.ExitReadLock();
return count;
}
public List<T> AsList()
{
- _treeLock.AcquireReaderLock(Timeout.Infinite);
+ _treeLock.EnterReadLock();
List<T> list = _tree.AsList();
- _treeLock.ReleaseReaderLock();
+ _treeLock.ExitReadLock();
return list;
}